web-dev-qa-db-de.com

PHP Schwerwiegender Fehler: Klasse kann nicht neu deklariert werden

Weiß jemand, was dieses Problem verursachen kann?

Schwerwiegender PHP-Fehler: Klasse kann nicht erneut deklariert werden

160
Jin Yong

Das bedeutet, dass Sie bereits eine Klasse erstellt haben.

Zum Beispiel:

class Foo {}

// some code here

class Foo {}

Dieser zweite Foo würde den Fehler auslösen.

117
whichdan

Sie haben eine Klasse mit demselben Namen mehr als einmal deklariert. Möglicherweise über mehrere Includes. Wenn Sie andere Dateien einbinden, müssen Sie so etwas wie verwenden

include_once "something.php";

mehrfacheinschlüsse zu verhindern. Dies ist sehr einfach, wenn auch nicht immer offensichtlich, da eine lange Kette von Dateien ineinandergreifen kann.

314
AaronLS

Das passiert, wenn Sie eine Klasse mehr als einmal auf einer Seite deklarieren. Sie können das Problem beheben, indem Sie diese Klasse entweder mit einer if-Anweisung umschließen (siehe unten) oder sie in eine separate Datei einfügen und require_once() anstelle von include() verwenden.

if (!class_exists('TestClass')) {
   // Put class TestClass here
}
55
Sam

Verwenden Sie include_once(); - dabei werden Ihre Codes nur einmal enthalten sein.

20
farhad

Dies wird passieren, wenn wir eine der eingebauten Klassen in der PHP-Bibliothek verwenden. Ich habe den Klassennamen als Verzeichnis verwendet und den gleichen Fehler erhalten. Wenn Sie eine Fehlermeldung erhalten, stellen Sie zunächst sicher, dass der von Ihnen verwendete Klassenname nicht zu den integrierten Klassen gehört.

15
Ajeesh

Dieser Fehler kann auch auftreten, wenn Sie das __construct Methode mehr als einmal.

12
yonicsurny

Manchmal passiert das aufgrund einiger Fehler in PHP FastCGI.

Versuchen Sie es neu zu starten. Bei Ubuntu ist es:

service php-fastcgi restart
8
luchaninov

Ich hatte das gleiche Problem bei der Verwendung von autoload wie folgt:

<?php

function __autoload($class_name)
{
    include $class_name . '.php';
}


__autoload("MyClass1");

$obj = new MyClass1();

?>

und in der anderen Klasse gab es:

namespace testClassNamespace;


class MyClass1
{

    function  __construct()
    {
        echo "MyClass1 constructor";
    }
}

Die Lösung besteht darin, die Namespace-Kompatibilität beizubehalten, in meinem Beispiel namespace testClassNamespace; in beiden Dateien.

6
Jacob

Nur hinzufügen;

Dieser Fehler kann auch auftreten, wenn Sie versehentlich eine Funktion in eine andere Funktion einfügen.

3
bretddog

PHP 5.3 (eine meiner Meinung nach auch ältere Version) scheint in verschiedenen Fällen Probleme mit dem gleichen Namen zu haben. Ich hatte dieses Problem, als ich die Klasse Login und die Schnittstelle hatte, die LogIn implementiert. Nachdem ich LogIn in Log_In umbenannt habe, wurde das Problem behoben.

3
Juri Sinitson

Tun Sie einfach eine Sache, wann immer Sie einen Dateinamen angeben oder benötigen, nämlich class.login.php. Sie können es auf diese Weise einfügen:

include_once class.login.php or 
require_once class.login.php

Auf diese Weise wird niemals ein Fehler ausgelöst.

3
Asraful Haque

Diese Funktion gibt einen Stapel aus, in dem angegeben wird, woher er aufgerufen wurde:

function PrintTrace() {
    $trace = debug_backtrace();
    echo '<pre>';
    $sb = array();
    foreach($trace as $item) {
        if(isset($item['file'])) {
            $sb[] = htmlspecialchars("$item[file]:$item[line]");
        } else {
            $sb[] = htmlspecialchars("$item[class]:$item[function]");
        }
    }
    echo implode("\n",$sb);
    echo '</pre>';
}

Rufen Sie diese Funktion oben in der Datei auf, die Ihre Klasse enthält.

Manchmal wird es nur einmal gedruckt, obwohl Ihre Klasse zweimal oder öfter enthalten ist. Dies liegt daran, dass PHP analysiert tatsächlich alle Klassen der obersten Ebene in einer Datei, bevor Code ausgeführt wird, und löst den schwerwiegenden Fehler sofort aus. Um dies zu beheben, schließen Sie Ihre Klassendeklaration in if(true) { ... } ein. Dann sollten Sie Ihre beiden Spuren vor PHP fatalen Fehlern erhalten.

Dies soll Ihnen helfen, herauszufinden, wo Ihre Klasse in einem komplexen Projekt mehrfach enthalten ist.

2
mpen

Ich hatte das gleiche Problem "Schwerwiegender PHP-Fehler: Klasse XYZ.php kann nicht erneut deklariert werden".

Ich habe zwei Verzeichnisse wie controller und model und ich habe versehentlich XYZ.php in beide Verzeichnisse hochgeladen.

Erste Lösung:

Finden Sie in Ihrem gesamten Projekt und stellen Sie sicher, dass Sie nur eine Klasse XYZ.php haben.

Zweite Lösung:

Fügen Sie einen Namespace in Ihre Klasse ein, damit Sie denselben Klassennamen verwenden können.

1

Hast du Zend Framework benutzt? Ich habe auch das gleiche Problem.
Ich habe es gelöst, indem ich die folgende Zeile in config/application.ini Auskommentiert habe:

;includePaths.library = APPLICATION_PATH "/../library"

Ich hoffe, dies wird dir helfen.

1
Praditha

Ein weiterer möglicher Täter ist die Quellcodeverwaltung und ungelöste Konflikte. SVN kann dazu führen, dass dieselbe Klasse zweimal in der Konfliktcodedatei angezeigt wird. zwei alternative Versionen davon ("meine" und "ihre").

1
Konrad Morawski

Ich bin auf dasselbe Problem gestoßen: Neuere PHP-Versionen haben nicht die gleichen Auswirkungen auf mehrere Einschlüsse derselben Datei (wie eine Bibliothek), daher muss ich jetzt alle meine Einschlüsse durch ein include_once ändern.

Oder diese Tricks könnten helfen, wenn Sie nicht zu viel Unterricht in Ihrer Bibliothek haben ...

if( class_exists('TestClass') != true )
{
   //your definition of TestClass
}
1
Alexandre Mazel

ich bin auf dasselbe Problem gestoßen. fand heraus, dass der Fall der Klassenname war. Ich habe mich darum gekümmert, indem ich den Namen geändert habe. daher das Problem zu lösen.

0
R T

Dies bedeutet, dass die Klasse bereits auf der Seite deklariert ist und Sie versuchen, sie neu zu erstellen.

Eine einfache Technik ist wie folgt.

Ich habe das Problem folgendermaßen gelöst. Hoffe das wird dir ein bisschen helfen.

if(!class_exists("testClassIfExist"))
{
    require_once("testClassIfExist.php");
}
0
mohitesachin217