Вопрос наследования класса php новичка - PullRequest
0 голосов
/ 25 августа 2009

Недавно у меня возникла проблема с php-проектом, который, как я наконец понял, сводился к тому, как я структурировал свои классы. Если я попытался включить более одного класса на страницу, и оба класса использовали один и тот же родительский класс, сценарий завершился неудачно. Теперь я решил проблему, но мне было интересно, если бы кто-то мог объяснить мне, почему то, что я делал, не работало, потому что я не совсем понял это! Вот иллюстрация того, что НЕ работает:

класс А.
класс B расширяет A.
класс С расширяет А.
класс D расширяет B.
класс Е расширяет C.

Мне требуются класс D и класс E, и сценарий не выполняется. Если класс C не наследует A, то все работает нормально. Очевидно, это как-то связано с требованием класса А дважды, но кто-то может объяснить это в очень простых терминах для меня?!?!?

Ответы [ 3 ]

3 голосов
/ 25 августа 2009

Вы можете объявить каждый класс только один раз. Если вам требуется файл, в котором ваш класс определен более одного раза, парсер встречает class A, выполняет внутренний поиск и выдает: «Эй, вы уже определили этот класс». Самое простое решение - поместить каждый класс в отдельный файл и вызвать require_once вместо require.

3 голосов
/ 25 августа 2009

У вас есть каждый класс в отдельном файле?

Вы используете require / include вместо require_once / include_once? include_once и require_once также не совместно используют одну и ту же таблицу включенных файлов, поэтому вы должны использовать ее последовательно.

Или последовательно использовать функцию __autoload в PHP5.

2 голосов
/ 25 августа 2009

Все функции или классы, определенные в включенных файлах, объявляются в глобальной области видимости. Вот почему вы, вероятно, получаете ошибки объявления. Решение состоит в том, чтобы использовать require_once или include_once вместо require или include.

Самый элегантный способ - использовать __autoload, но для этого требуется PHP версии 5 или новее. Единственным недостатком автозагрузки является то, что любой сбой является фатальной ошибкой, с которой вы сами не справитесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...