J'ai 5 scripts, disons: database.php, parent.php, child1.php, child2.php et somescript.php
la classe parent.php ressemble à ceci:
include 'database.php';
class Parent {
public $db;
function __construct() {
$this->db = new Database();
}
}
les classes child1 et child2 ressemblent à ceci:
include 'parent.php';
class Child1 extends Parent {
function __construct() {
parent::__construct();
}
function useDb() {
$this->db->some_db_operation();
}
}
Le problème
Lorsque j'essaie d'inclure à la fois l'enfant1 et l'enfant2 dans le fichier somescript.php, l'erreur suivante s'affiche:
ne peut pas déclarer la classe Database parce que le nom est déjà utilisé dans database.php à la ligne 4 (cette ligne contient les mots 'classe Database')
Mais si je n'inclus qu'un seul fichier (child1 ou child2), cela fonctionne très bien.
Comment puis-je corriger cela?
vous voulez utiliser include_once () ou require_once () . L’autre option serait de créer un fichier supplémentaire avec tous les inclus de votre classe dans le bon ordre afin qu’ils n’aient pas besoin d’appeler eux-mêmes:
"classes.php"
include 'database.php';
include 'parent.php';
include 'child1.php';
include 'child2.php';
Alors vous avez juste besoin de:
require_once('classes.php');
essayez d'utiliser include_once
ou require_once
au lieu de include
ou require
Une autre option pour include_once ou require_once consiste à utiliser le chargement automatique de classe. http://php.net/manual/en/language.oop5.autoload.php
J'ai eu ce problème avant et pour résoudre ce problème, assurez-vous juste:
Mon problème (avant):
J'avais: Core, Router, Autorisations et Render Core inclut la classe Router, Router appelle ensuite la classe Permissions, puis Router __destruct appelle la classe Render et le message d'erreur "Impossible de déclarer la classe car son nom est déjà utilisé". apparu.
Solution :
J'ai ajouté __destruct à la classe Autorisation et le __destruct était vide et résolu ...