Fatal error: Cannot redeclare class Base de données
j'ai fœtale message d'erreur de dire :
Fatal error: Cannot redeclare class dans la Base de données C:\wamp\www\pets_new\lib\database.php sur la ligne 3
require_once("lib/message.php");
require_once("lib/user.php");
et tous se connecter à la base de données de la classe
Classe de message
<?php
require('database.php');
class Message{
Classe utilisateur :
<?php
require('database.php');
class User{
Votre 2 ligne extrait n'est pas
evry classe d'entre eux contiennent cette ligne require_once("lib/database.php") ;
Vérifiez à l'intérieur de votre user.php ou message.php fichier. Vous avez déjà incluent un database.php fichier de la classe de Base de données est déjà déclaré.
database.php
, est-il?evry classe d'entre eux contiennent cette ligne require_once("lib/database.php") ;
Vérifiez à l'intérieur de votre user.php ou message.php fichier. Vous avez déjà incluent un database.php fichier de la classe de Base de données est déjà déclaré.
OriginalL'auteur Amr Ezz | 2014-04-14
Vous devez vous connecter pour publier un commentaire.
Vous d'inclure les 2 fichiers dans un seul "exécuter". Pensez-y comme ça: Tous les fichiers sont mis en place par PHP pour créer un gros script. Chaque
include
ourequire
récupère un fichier, et colle son contenu dans un gros script.Les deux fichiers que vous y compris, à la fois besoin le même fichier, qui déclare la
Database
classe. Cela signifie que la grande script PHP génère ressemble à ceci:Comme vous pouvez le voir classe
Database
est déclarée deux fois, d'où l'erreur.Pour l'instant, une solution rapide peut être de remplacer le
require('database.php');
états avec:Qui vérifie si le fichier n'a pas été inclus/requis avant. Si il a été inclus/requis avant, PHP ne nécessite pas de nouveau.
Un plus définitif et, à mon humble avis, la meilleure solution serait d'enregistrer un chargeur automatique de fonction/méthode de classe, et laisser que le code de prendre soin des affaires.
Plus sur la façon d'enregistrer un autochargeur peut être trouvé dans les docs. Si vous allez vers le bas de cette route, vous auriez probablement envie de prendre un coup d'oeil à la codification des normes concernant les noms de classes et espaces de noms ici. Si vous vous conformer à ces normes, vous n'avez pas à écrire votre propre autochargeur, et peut tout simplement utiliser la classe universelle de chargeur de Symfony2, ou tout autre cadre que s'inscrit à l'PHP-FIG normes (comme CodeIgnitor, Zend, Gâteau... à vous de choisir)
OriginalL'auteur Elias Van Ootegem
Essayer comme cela , alors que la classe de déclaration
require_once
, vous n'avez pas besoin de la!class_exists
peu de toute façon...corriger , éditer ma réponse
Semble parfois vous avez besoin. J'ai juste rencontré un tel cas, cela m'a aidé (et non, pas de mélange de
require()
etrequire_once()
dans mon cas. Je pense qu'ici il a été causé par des liens symboliques).Si vous avez besoin de la
class_exists
, vous avez sans doute pu le faire avec une meilleure autochargeur.class_exists
, à moins d'indication contraire, l'évocation de l'autochargeur qui cherche les fichiers tout au long de la chemin de. Si ceux qui ne peuvent pas être trouvés,class_exists
renvoie la valeur false. Si vous avez besoin d'inclure manuellement ou exige que les fichiers, les chances sont que vous êtes en train de faire quelque chose de mal. Je travaille sur de gros projets (souvent au nord de 1 million de LoC), et je n'ai jamais utiliserrequire
ourequire_once
à l'extérieur de tests...OriginalL'auteur Dimag Kharab
Cela signifie que vous avez déjà déclaré la classe de Base de données, la deuxième fois il est chargé (où la copie est), c'est l'origine de l'erreur. Nous ne pouvons pas voir votre contenu des deux fichiers que vous avez cité. Cependant, je suis sûr que si vous regardez dans les deux, vous trouverez au moins deux créations de la classe de Base de données. Un seul besoin d'être enlevé.
Oui, mais si vous êtes, y compris database.php dans le fichier principal. Mais aussi dans tous les autres fichiers que vous êtes, y compris dans le fichier principal. Vous aurez l'erreur de cette façon.
Il est évident exiger v require_once problème...
Et c'est pourquoi nous utilisons des chargeurs automatiques ;-P
OriginalL'auteur Greg