Разве плохо использовать автозагрузку в PHP? - PullRequest
6 голосов
/ 11 сентября 2009

С php.net :

В PHP 5 это больше не нужно. Вы можете определить функцию __autoload(), которая автоматически вызывается в случае, если вы пытаетесь использовать класс / интерфейс, который еще не определен. Вызывая эту функцию, скриптовому движку дается последний шанс загрузить класс, прежде чем PHP выйдет из строя с ошибкой.

Теперь я хочу знать, является ли плохой практикой использование __autoload исключительно для загрузки соответствующих классов на динамическом сайте?

Способ настройки моего сайта - включить файлы в файл index.php, например http://www.site.com/index.php?p=PAGE-I-WANT-TO-LOAD

Поэтому, если я нахожусь в разделе форумов или в разделе блогов моего сайта, я хочу, чтобы загружались только соответствующие классы и функции, поэтому я использую автозагрузку, но никогда не включаю файл вручную, если я использую __autoload как в крайнем случае, или у меня все хорошо, даже при высокой загруженности?

Ответы [ 4 ]

9 голосов
/ 11 сентября 2009

Bad? Нет. __autoload() - одно из моих любимых дополнений к PHP 5. Оно снимает с себя ответственность (и раздражает) ручного включения / требования файлов классов, необходимых для вашего приложения. При этом вам, как разработчику, следует убедиться, что загружены только «соответствующие классы». Это легко сделать с помощью структурированной схемы именования и структуры каталогов. В Интернете есть множество примеров того, как правильно использовать __autoload (), выполнить поиск в Google, и вы найдете много информации.

8 голосов
/ 11 сентября 2009

Автозагрузка - это хороший способ загрузить только те классы, которые необходимы.

В PHP 5> = 5.1.2 большинство проблем со старым __autoload () исчезли благодаря spl_autoload_register () .

4 голосов
/ 11 сентября 2009

Теперь я хочу знать, является ли плохой практикой использование только __autoload для загрузки соответствующих классов на динамический сайт?

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

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

Вот цитата из руководства пользователя Zend Guard:

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

3 голосов
/ 11 сентября 2009

Единственная опасность для __autoload () - если вы определили плохую функцию автозагрузки. Как правило, все, что вы собираетесь получить с точки зрения снижения производительности, - это поиск нескольких дисков, так как PHP ищет нужные файлы, содержащие ваши классы. Положительным моментом является избавление от всех этих назойливых include() звонков.

Если вы беспокоитесь о производительности на этом уровне, то вы уже должны использовать кэш кода операции, такой как APC.

...