Weiß jemand, was dieses Problem verursachen kann?
Schwerwiegender PHP-Fehler: Klasse kann nicht neu deklariert werden
php
class
fatal-error
Jin Yong
quelle
quelle
if(!class_exists('YourClass')){ include 'YourClass.php'; }
Antworten:
Dies bedeutet, dass Sie bereits eine Klasse erstellt haben.
Zum Beispiel:
Dieser zweite Foo würde den Fehler auslösen.
quelle
Sie haben eine gleichnamige Klasse mehr als einmal deklariert. Möglicherweise über mehrere Includes. Wenn Sie andere Dateien einschließen, müssen Sie so etwas wie verwenden
um mehrfache Einschlüsse zu verhindern. Dies ist sehr einfach, wenn auch nicht immer offensichtlich, da möglicherweise eine lange Kette von Dateien ineinander eingeschlossen ist.
quelle
Dies geschieht, 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 (wie unten) umschließen oder sie in eine separate Datei einfügen und
require_once()
stattdessen verwendeninclude()
.quelle
class_exists('TestClass') === false
oder!class_exists('TestClass')
Verwendung
include_once();
- damit werden Ihre Codes nur einmal aufgenommen.quelle
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 zuerst eine Fehlermeldung erhalten, stellen Sie sicher, dass der von Ihnen verwendete Klassenname nicht zu den integrierten Klassen gehört.
quelle
Dieser Fehler kann auch auftreten, wenn Sie die
__construct
Methode mehrmals definieren .quelle
Manchmal geschieht dies aufgrund einiger Fehler in PHPs FastCGI.
Versuchen Sie es neu zu starten. Bei Ubuntu ist es:
quelle
Ich hatte das gleiche Problem bei der Verwendung
autoload
wie folgt:und in anderen Klassen gab es:
Die Lösung besteht darin, die Namespace-Kompatibilität beizubehalten, in meinem Beispiel
namespace testClassNamespace;
in beiden Dateien.quelle
Einfach hinzufügen;
Dieser Fehler kann auch auftreten, wenn Sie versehentlich eine Funktion in eine andere Funktion einfügen.
quelle
PHP 5.3 (und ich denke auch ältere Versionen) scheint in verschiedenen Fällen Probleme mit demselben Namen zu haben. Ich hatte also dieses Problem, als a die Klasse Login und die Schnittstelle hatte, auf der LogIn implementiert ist. Nachdem ich LogIn in Log_In umbenannt hatte, wurde das Problem behoben.
quelle
Tun Sie einfach eine Sache, wenn Sie einen Dateinamen einschließen oder benötigen, nämlich class.login.php. Sie können es folgendermaßen einschließen:
Auf diese Weise wird niemals ein Fehler ausgegeben.
quelle
Diese Funktion druckt einen Stapel, der Ihnen sagt, woher er aufgerufen wurde:
Rufen Sie diese Funktion oben in der Datei auf, die Ihre Klasse enthält.
Manchmal wird es nur einmal gedruckt, obwohl Ihre Klasse zwei oder mehr Mal aufgenommen wird. Dies liegt daran, dass PHP tatsächlich alle Klassen der obersten Ebene in einer Datei analysiert, bevor Code ausgeführt wird, und den schwerwiegenden Fehler sofort auslöst. Um dies zu beheben, wickeln Sie Ihre Klassendeklaration in ein
if(true) { ... }
, wodurch Ihre Klasse um eine Ebene nach unten verschoben wird. Dann sollten Sie Ihre beiden Spuren vor schwerwiegenden PHP-Fehlern erhalten.Dies soll Ihnen helfen, herauszufinden, wo Ihre Klasse mehrmals in ein komplexes Projekt aufgenommen wird.
quelle
Haben Sie Zend Framework verwendet? Ich habe auch das gleiche Problem.
Ich habe es gelöst, indem ich dies in der folgenden Zeile auskommentiert habe
config/application.ini
:Ich hoffe, dies wird dir helfen.
quelle
Ein weiterer möglicher Schuldiger ist die Quellcodeverwaltung und ungelöste Konflikte. SVN kann dazu führen, dass dieselbe Klasse zweimal in der Code-Datei mit Konflikten angezeigt wird. zwei alternative Versionen davon ("meine" und "ihre").
quelle
Ich bin auf dasselbe Problem gestoßen: Die neuere PHP-Version behandelt nicht dasselbe mit mehreren Einschlüssen derselben Datei (als Bibliothek), daher muss ich jetzt alle meine Includes durch include_once ändern.
Oder diese Tricks könnten helfen, wenn Sie nicht zu viel Unterricht in Ihrer Bibliothek haben ...
quelle
Ich hatte das gleiche Problem "Schwerwiegender PHP-Fehler: Klasse XYZ.php kann nicht neu deklariert werden".
Ich habe zwei Verzeichnisse wie
controller
undmodel
und habe versehentlich XYZ.php in beide Verzeichnisse hochgeladen (also verursacht eine Datei mit demselben Namen das Problem).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 Ihrer Klasse einen Namespace hinzu, damit Sie denselben Klassennamen verwenden können.
quelle
Ich bin auf das gleiche Problem gestoßen. fand heraus, dass der Fall der Klassenname war. Ich habe mich darum gekümmert, indem ich den Namen geändert habe. damit das Problem lösen.
quelle
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 mit folgendem gelöst. Hoffe das wird dir ein bisschen helfen.
quelle