Jeg har 5 skript, la oss si: database.php, parent.php, child1.php, child2.php og somescript.php.
parent.php-klassen ser slik ut:
include 'database.php';
class Parent {
public $db;
function __construct() {
$this->db = new Database();
}
}
klassene child1 og child2 ser slik ut:
include 'parent.php';
class Child1 extends Parent {
function __construct() {
parent::__construct();
}
function useDb() {
$this->db->some_db_operation();
}
}
Problemet
Når jeg prøver å inkludere både child1 og child2 i somescript.php, får jeg følgende feilmelding:
kan ikke deklarere klassen Database fordi navnet allerede er i bruk i database.php på linje 4 (dette er linjen som inneholder ordene 'class Database').
Men hvis jeg bare inkluderer en enkelt fil (child1 eller child2), fungerer det utmerket.
Hvordan retter jeg opp i dette?
du vil bruke include_once() eller require_once(). Det andre alternativet er å opprette en ekstra fil med alle klassene dine i riktig rekkefølge, slik at de ikke trenger å kalle includes selv:
"classes.php"
include 'database.php';
include 'parent.php';
include 'child1.php';
include 'child2.php';
Da trenger du bare:
require_once('classes.php');
Jeg hadde dette problemet før og for å fikse dette, Bare sørg for at:
Mitt problem (før) :
Jeg hadde klassene Core, Router, Permissions og Render.
Core inkluderer Router-klassen, Router kaller deretter Permissions-klassen, deretter kaller Router __destruct Render-klassen og feilen "Cannot declare class because the name is already in use" dukket opp.
Løsning: Jeg la til destruct på Permission-klassen, og destruct var tom, og det er løst ...