Tengo 5 scripts, digamos: database.php, parent.php, child1.php, child2.php y somescript.php
La clase parent.php tiene el siguiente aspecto
include 'database.php';
class Parent {
public $db;
function __construct() {
$this->db = new Database();
}
}
Las clases child1 y child2 tienen este aspecto:
include 'parent.php';
class Child1 extends Parent {
function __construct() {
parent::__construct();
}
function useDb() {
$this->db->some_db_operation();
}
}
El problema
Cuando intento incluir tanto child1 como child2 en somescript.php, me devuelve el siguiente error:
no se puede declarar la clase Database porque el nombre ya está en uso en database.php en la línea 4 (esta es la línea que contiene las palabras 'class Database')
Pero si incluyo sólo un archivo (child1 o child2), funciona perfectamente.
¿Cómo puedo corregirlo?
quieres usar include_once() o require_once(). La otra opción sería crear un archivo adicional con todos los includes de tus clases en el orden correcto para que no tengan que llamar a los includes ellos mismos:
"classes.php"
include 'database.php';
include 'parent.php';
include 'child1.php';
include 'child2.php';
Entonces sólo necesitas
require_once('classes.php');
Ya tuve este problema y para solucionarlo, Sólo asegúrese de que:
Mi problema (antes) :
Tenía las clases : Core, Router, Permissions y Render
Core incluye la clase Router, Router luego llama a la clase Permissions, luego Router __destruct llama a la clase Render y el error "No se puede declarar la clase porque el nombre ya está en uso" apareció.
Solución: He añadido destruct en la clase Permisos y el destruct estaba vacío y se ha solucionado...