Избегайте включения абстрактного класса в общий файл начальной загрузки - PullRequest
1 голос
/ 10 августа 2010

В моем проекте, скажем, я создаю экземпляр класса с именем SubClass, который расширяет абстрактный класс с именем AbstractClass. Вверху моих файлов я включаю файл с именем bootstrap.inc, который включает в себя AbstractClass в каждом файле. Затем, когда мне это нужно, я включаю SubClass, который не содержит включения в AbstractClass.

Если я включу AbstractClass в файлы классов, которые его расширяют (например, SubClass), иногда я использую несколько подклассов в одном файле и получаю ошибку. Я бы предпочел не включать AbstractClass в каждый файл с помощью начальной загрузки, поскольку я не всегда его использую, но не могу придумать, как этого избежать.

Мне сообщили, что использование include_once() является признаком плохого дизайна, поэтому избегал этого, хотя это было бы одним из решений.

Есть ли альтернативный метод include_once()?

Ответы [ 2 ]

4 голосов
/ 10 августа 2010

Во-первых, как правило, рекомендуется придерживаться одного класса на файл. Если вы беспокоитесь о производительности, вы параноик. В производстве вы всегда можете включить APC с отключенной статистикой.

Во-вторых, в include_once / require_once нет ничего плохого.

Если вы не собираетесь настраивать магию автозагрузки, просто придерживайтесь одного класса на файл.

При отсутствии какой-либо конкретной озабоченности (то есть чего-то, что вы на самом деле понимаете, а не только слухов, которые вы слышали), следующая схема вполне подходит:

<?PHP
require_once 'MyAbstract.class.php';

class Concrete extends MyAbstract {
 //...
}
// end-of-file
2 голосов
/ 10 августа 2010
Механизм

PHP Autoloading может быть идеальным для вас.

Тем не менее, нет ничего плохого в include_once(). То, о чем этот человек говорил о недостатке дизайна, вероятно, имел в виду, что поток кода, который включает один и тот же файл более одного раза (таким образом, * include_once(), необходимый для include(), скорее всего, плохо спроектирован.

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