У большинства фреймворков есть автозагрузчик - PullRequest
2 голосов
/ 05 июня 2011

Фреймворк, который я использую (Zend), имеет встроенный автозагрузчик. Я думаю, что этот автозагрузчик заботится о загрузке не только самого Zend, но и любых других библиотек, которые разработчик может добавить в проект.

Это нормальная практика для фреймворка иметь автозагрузчик? Любой, что не имеет?

Нужно ли иметь автозагрузчик?

Ответы [ 5 ]

4 голосов
/ 05 июня 2011

Автозагрузчик ZF по умолчанию будет загружать только классы ZF. Он может (и должен быть) сконфигурирован для загрузки ваших пользовательских классов, и вы также можете добавить дополнительный автозагрузчик из других платформ. ZF 2 будет иметь автозагрузчик карты классов в дополнение к автозагрузчику PSR-0 . См. сообщение в блоге от ZF Мэтью Вейера О'Пинни о тестах автозагрузки

Да, автозагрузчики распространены потому, что вы не хотите, чтобы операторы во всем коде требовали операторов. Это не строго необходимо, хотя. Родной способ достижения автозагрузки - spl_autoload_register.

2 голосов
/ 05 июня 2011

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

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

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

так что на вашей странице index.php вам может понадобиться 5 библиотек, но для вашего register.php вам могут понадобиться только 2 библиотеки, так что использование автозагрузчика сэкономит вам 3 включения на странице регистрации.

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

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

http://groups.google.com/group/php-standards/web/psr-0-final-proposal

2 голосов
/ 05 июня 2011

Да, Это обычная практика , чтобы включить автозагрузчик в фреймворк.

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

Да,это необходимо, если вы хотите, чтобы фреймворк был достаточно гибким 1008 *.Это облегчает добавление модулей / классов для простого копирования файлов в правильный каталог и вызова их из кода.Автозагрузчик включает в себя только правильные файлы вместо того, чтобы включать все файлы (даже если они в данный момент не нужны).

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

2 голосов
/ 05 июня 2011

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

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

[Редактировать]

По-видимому, требуется пояснение по моему утверждению CodeIgniter.Да, есть место auto_load, которое позволяет вам указать библиотеки / модули, которые вы хотите автоматически загружать в начале каждого скрипта, и да, есть библиотека загрузчиков, но они не совпадают с реальными автозагрузчиками.

Вы должны указать, какие из них вы хотите в начале, он не знает, что вы хотите загрузить модель Pizza_Store, пока вы не используете пользовательский

$this->load->model->('foo');

, который эквивалентен

include 'application/models/foo.php';
$this->Foo = new foo();

Но на самом деле это не то же самое, что просто вызвать $this->foo = new Models_Foo(); и CodeIgniter, зная, что вы подразумеваете под ним, что и происходит, когда используется автозагрузчик.

[Редактироватьpart deux]

Нигде в коде не написано __autoload, spl_autoload или spl_autoload_register.Это потому, что он поддерживает совместимость с PHP 4.Это просто способ построения фреймворка, есть ложная автозагрузка, как я уже говорил выше, но она делает это для каждого «автозагрузочного» класса:

foreach($autoloaded_class as $type=>$class){
    if(is_application_class($class)){
        include "application/{$type}/{$class}.php";
    }
    elseif(is_core($class)){
        include "core/{$type}/{$class}.php";
    }
}
$array['Foo'] = new Foo();
$controller($array);

, который по сути вызывает:

включает 'foo.php';

вверху каждого файла, независимо от того, нужен он вам или нет.

2 голосов
/ 05 июня 2011

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

...