Ich habe 5 Skripte, sagen wir: database.php, parent.php, child1.php, child2.php und somescript.php
Die Klasse parent.php sieht wie folgt aus:
include 'database.php';
class Parent {
public $db;
function __construct() {
$this->db = new Database();
}
}
Die Klassen child1 und child2 sehen wie folgt aus:
include 'parent.php';
class Child1 extends Parent {
function __construct() {
parent::__construct();
}
function useDb() {
$this->db->some_db_operation();
}
}
Das Problem
Wenn ich versuche, sowohl child1 als auch child2 in somescript.php einzubinden, wird die folgende Fehlermeldung ausgegeben:
kann die Klasse Database nicht deklarieren, da der Name bereits verwendet wird in database.php auf Zeile 4 (dies ist die Zeile, die die Worte 'class Database' enthält)
Wenn ich jedoch nur eine einzige Datei einfüge (child1 oder child2), funktioniert es einwandfrei.
Wie kann ich das korrigieren?
Sie wollen include_once() oder require_once() verwenden. Die andere Möglichkeit wäre, eine zusätzliche Datei mit all Ihren Klassen-Includes in der richtigen Reihenfolge zu erstellen, damit sie nicht selbst Includes aufrufen müssen:
"classes.php"
include 'database.php';
include 'parent.php';
include 'child1.php';
include 'child2.php';
Dann brauchen Sie nur noch:
require_once('classes.php');
versuchen, include_once
oder require_once
anstelle von include
oder require
zu verwenden
Ich hatte dieses Problem schon einmal und kann es beheben, Stellen Sie einfach sicher, dass:
Mein Problem (vorher) :
Ich hatte Klassen: Core, Router, Permissions und Render
Core include's die Router-Klasse, Router ruft dann die Permissions-Klasse auf, dann ruft Router __destruct die Render-Klasse auf und der Fehler "Cannot declare class because the name is already in use" erschien.
Lösung: Ich fügte destruct auf Permission Klasse und die destruct war leer und es ist behoben...