Est-ce que quelqu'un sait ce qui peut causer ce problème?
Erreur irrécupérable PHP: impossible de redéclare la classe
Cela signifie que vous avez déjà créé une classe.
Par exemple:
class Foo {}
// some code here
class Foo {}
Ce deuxième Foo lancerait l'erreur.
Vous avez une classe du même nom déclarée plus d'une fois. Peut-être via plusieurs inclus. Lorsque vous incluez d’autres fichiers, vous devez utiliser quelque chose comme:
include_once "something.php";
pour éviter les inclusions multiples. C’est très facile, bien que cela ne soit pas toujours évident, puisqu’une longue chaîne de fichiers peut être incluse les uns par les autres.
Cela se produit lorsque vous déclarez une classe plusieurs fois dans une page. Vous pouvez résoudre ce problème en enveloppant cette classe avec une instruction if (comme ci-dessous) ou en la plaçant dans un fichier séparé et en utilisant require_once()
au lieu de include()
.
if (!class_exists('TestClass')) {
// Put class TestClass here
}
Utilisez include_once();
- avec ceci, vos codes ne seront inclus qu’une fois.
Cela se produira si nous utilisons l'une des classes intégrées de la bibliothèque php. J'ai utilisé le nom de la classe comme répertoire et j'ai eu la même erreur. Si vous obtenez une erreur en premier, assurez-vous que le nom de la classe que vous utilisez ne fait pas partie des classes intégrées.
Cette erreur peut également se produire si vous définissez la méthode __construct
plusieurs fois.
Cela se produit parfois à cause de bugs dans PHP FastCGI.
Essayez de le redémarrer. Chez Ubuntu, c'est:
service php-fastcgi restart
J'ai eu le même problème en utilisant autoload
comme suit:
<?php
function __autoload($class_name)
{
include $class_name . '.php';
}
__autoload("MyClass1");
$obj = new MyClass1();
?>
et dans une autre classe il y avait:
namespace testClassNamespace;
class MyClass1
{
function __construct()
{
echo "MyClass1 constructor";
}
}
La solution consiste à conserver la compatibilité des espaces de noms, dans mon exemple namespace testClassNamespace;
dans les deux fichiers.
Il suffit d'ajouter;
Cette erreur peut également se produire si vous insérez par erreur une fonction dans une autre fonction.
PHP 5.3 (une version aussi ancienne, je pense) semble avoir des problèmes avec le même nom dans différents cas. J'ai donc eu ce problème quand a eu la classe Login et l'interface implémentée LogIn. Après avoir renommé LogIn en Log_In, le problème a été résolu.
Faites juste une chose à chaque fois que vous incluez ou exigez un nom de fichier, à savoir class.login.php. Vous pouvez l'inclure de cette façon:
include_once class.login.php or
require_once class.login.php
De cette façon, il ne jette jamais une erreur.
Cette fonction imprimera une pile vous indiquant d'où elle a été appelée:
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>';
}
Appelez cette fonction en haut du fichier qui inclut votre classe.
Parfois, il n’imprimera qu’une fois, même si votre cours est inclus deux fois ou plus. En effet, PHP analyse en fait toutes les classes de niveau supérieur d'un fichier avant d'exécuter du code et renvoie immédiatement l'erreur fatale. Pour remédier à cela, placez votre déclaration de classe dans if(true) { ... }
, ce qui permettra à votre classe de descendre d'un niveau. Ensuite, vous devriez obtenir vos deux traces avant les erreurs fatales PHP.
Cela devrait vous aider à trouver où votre classe est incluse à plusieurs reprises dans un projet complexe.
J'ai eu le même problème "Erreur PHP Fatal: Impossible de redéclarer la classe XYZ.php".
J'ai deux répertoires comme controller
et model
et j'ai téléchargé par erreur XYZ.php dans les deux répertoires (un fichier portant le même nom est donc à l'origine du problème).
Recherchez dans l'ensemble de votre projet et assurez-vous de n'avoir qu'une seule classe XYZ.php.
Ajoutez un espace de noms dans votre classe pour pouvoir utiliser le même nom de classe.
Avez-vous utilisé Zend Framework? J'ai le même probléme.
Je l'ai résolu en commentant la ligne suivante dans config/application.ini
:
;includePaths.library = APPLICATION_PATH "/../library"
J'espère que cela t'aidera.
Un autre coupable possible est le contrôle de source et les conflits non résolus. SVN peut faire en sorte que la même classe apparaisse deux fois dans le fichier de code en conflit; deux versions alternatives de celui-ci ("mine" et "leur").
J'ai rencontré le même problème: la nouvelle version de php ne traite pas de la même façon avec plusieurs inclusions du même fichier (en tant que bibliothèque), donc maintenant je dois changer tous mes include par certains include_once.
Ou bien, cette astuce pourrait vous aider si vous n’avez pas trop de classe dans votre bibliothèque ...
if( class_exists('TestClass') != true )
{
//your definition of TestClass
}
j'ai rencontré le même problème. découvert le cas était le nom de la classe. J'ai traité avec en changeant le nom. donc résoudre le problème.
Cela signifie en fait que la classe est déjà déclarée dans la page et que vous essayez de la recréer.
Une technique simple est la suivante.
J'ai résolu le problème avec ce qui suit. J'espère que cela vous aidera un peu.
if(!class_exists("testClassIfExist"))
{
require_once("testClassIfExist.php");
}