PHP: невозможно объявить класс, потому что имя уже используется

У меня есть 5 скриптов, скажем: database.php, parent.php, child1.php, child2.php и somescript.php

Класс parent.php выглядит следующим образом:

include 'database.php';

class Parent {
    public $db;
    function __construct() {
        $this->db = new Database();
    }
}

child1 и child2 классы выглядят следующим образом:

include 'parent.php';

class Child1 extends Parent {
    function __construct() {
        parent::__construct();
    }

    function useDb() {
        $this->db->some_db_operation();
    }
}

Проблема

Когда я пытаюсь включить child1 и child2 в somescript.php, он возвращает следующую ошибку:

не может объявить базу данных класса, поскольку имя уже используется в database.php в строке 4 (это строка, содержащая базу данных классов слов)

Но если я включаю только один файл (child1 или child2), он отлично работает.

Как это исправить?

Ответ 1

вы хотите использовать include_once() или require_once(). Другой вариант - создать дополнительный файл со всеми вашими классами в правильном порядке, чтобы их не нужно было включать:

"classes.php"

include 'database.php';
include 'parent.php';
include 'child1.php';
include 'child2.php';

Тогда вам просто нужно:

require_once('classes.php');

Ответ 2

попробуйте использовать include_once или require_once вместо include или require

Ответ 4

У меня была эта проблема раньше, и чтобы исправить это, Просто убедитесь:

  1. Вы не создали экземпляр этого класса до
  2. Если вы вызываете это из метода класса, убедитесь, что __destruct установлено в классе, из которого вы вызвали.

Моя проблема (до):
У меня был класс: Core, Router, Permissions и Render Ядро включает в себя класс Router, затем Router вызывает класс Permissions, затем Router __destruct вызывает класс Render, и появляется сообщение об ошибке "Невозможно объявить класс, так как имя уже используется".

Решение:
Я добавил __destruct для класса Permission, и __destruct был пуст, и он исправил...