Не удается переопределить classX в classX.php?

Я искал похожие вопросы, но не нашел ни одного. Обычная проблема состоит в том, что определенный класс не может быть повторно объявлен в другом классе, и поэтому решение состоит в том, чтобы использовать "require_once" или "include_once". Но моя ошибка не позволяет самому классу переопределиться!

Позвольте мне объяснить, у меня есть два класса, Design а также DesignSide, У меня есть куча файлов PHP, где я использую эти два класса. - build_design.php, - browse_designs.php, который дает вызов AJAX для - load_designs.php

У каждого дизайна может быть несколько сторон, поэтому все 3 файла выше содержат строку:

require_once("Design.php");

а также Design.php имеет строку:

require_once("DesignSide.php");

Но на build_design.php моя ошибка такова:

Fatal error: Cannot redeclare class DesignSide in ../classes/DesignSide.php on line 4

то есть он возражает против того, чтобы DesignSide объявила себя! Это первые строки DesignSide:

<?php

class DesignSide
{
private $id;
private $data;
private $designtag;
private $side;

В чем дело?

2 ответа

Решение

... или вы можете использовать одно из волшебства PHP __autoload в ваших сценариях, чтобы предотвратить такое поведение.

Сохраните этот файл как config.php

function __autoload( $class ) {
    if( file_exists( $class . '.php' ) ) {
        require_once $class . '.php';
    } else {
        die( 'No such file.' );
    }
}

Теперь включить / требовать config.php во всех ваших файлах, и вам не нужно включать / требовать файлы классов.

Единственное предостережение в том, что имена классов должны соответствовать имени файла.

Кто-то просто удалил свой ответ - но я просто хотел отметить его как правильный ответ. Оказалось, что на самом деле у меня был "DesignSide.php" дважды, в build_design.php, Спасибо! Виноват!

Поэтому правильным ответом было включить класс DesignSide в Design и включить класс Design только в три php-файла.

Другие вопросы по тегам