Weiß jemand, was dieses Problem verursachen kann?
Schwerwiegender PHP-Fehler: Klasse kann nicht erneut deklariert werden
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.
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.
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
}
Verwenden Sie include_once();
- dabei werden Ihre Codes nur einmal enthalten sein.
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.
Dieser Fehler kann auch auftreten, wenn Sie das __construct
Methode mehr als einmal.
Manchmal passiert das aufgrund einiger Fehler in PHP FastCGI.
Versuchen Sie es neu zu starten. Bei Ubuntu ist es:
service php-fastcgi restart
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.
Nur hinzufügen;
Dieser Fehler kann auch auftreten, wenn Sie versehentlich eine Funktion in eine andere Funktion einfügen.
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.
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.
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.
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.
Finden Sie in Ihrem gesamten Projekt und stellen Sie sicher, dass Sie nur eine Klasse XYZ.php haben.
Fügen Sie einen Namespace in Ihre Klasse ein, damit Sie denselben Klassennamen verwenden können.
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.
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").
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
}
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.
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");
}