2009-09-10 3 views
6

От php.net:Плохо ли использовать автозагрузку в PHP?

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

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

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

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

ответ

8

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

+1

Да, я использую его уже, я спрашивал, является ли это удачным произведением, чтобы полагаться на него. – JasonDavis

+2

@jason: Вероятно, вы должны сделать это ясно в своем вопросе, потому что сейчас вы ничего не упоминаете о производительности. –

+0

@musicfreak вы правы, но если это было плохо для производительности, то скорее всего это будет считаться «плохой практикой». – JasonDavis

8

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

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

+1

Я просто просмотрел ссылочную страницу spl_autoload_register(), но на самом деле я ее не понимаю, нужно или просто использовать основная функция __autoload нормально? – JasonDavis

+1

Если вы хотите иметь более одного автозагрузчика, вы должны использовать spl_autoload_register, если нет, то __autoload будет отлично работать. –

+0

Основная точка продажи spl_autoload_register() заключается в том, что библиотека классов может определять собственную функцию автозагрузки, не получая ошибку времени выполнения, поскольку __autoload() определяется дважды. – gnud

3

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

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

+0

Да, я использую APC, я не очень беспокоюсь, я просто не хотел продолжать использовать автозагрузчик, если было бы плохо ожидать, что он будет загружать файлы или использовать их в качестве резервной копии, например, если вы забыли t laod файл, спасибо для информации – JasonDavis

4

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

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

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

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

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

+0

Я в настоящее время уже пользуюсь автозагрузкой, но это хороший момент, когда он не работает с Zend Guard, который я не использую, но все еще хорошо знаю о +1 – JasonDavis