Raman 23 Ответов: 1

Что такое Автозагрузка и почему мы ее используем?


я не понимаю, что именно использует _ _ autoload и spl_autolaod_register в php.
а что такое подход PSR-0 ?

Что я уже пробовал:

spl_autoload_register(функция ($class_name) {
включают в себя $имя_класса . '.РНР';
});

$obj = новый MyClass1();
$obj2 = новый MyClass2();
?>

1 Ответов

Рейтинг:
4

Mohamad Karam

Когда вы пишете ООП-код, лучше поместить его в отдельные файлы. Автозапуск - это способ автоматического включения этих файлов, если они в данный момент не определены, и именно так документация php описывает эту проблему

Цитата:
Многие разработчики, пишущие объектно-ориентированные приложения, создают один исходный файл PHP для каждого определения класса. Одной из самых больших неприятностей является необходимость писать длинный список необходимых включений в начале каждого сценария (по одному для каждого класса).

Идея автоматической загрузки состоит в том, чтобы сделать автоматический способ загрузки файлов вашего проекта, когда они необходимы. PSR-0 (который устарел, и теперь вы должны работать с PSR-4) - это стандарты, которым вы должны следовать, чтобы назвать свои файлы и папки, чтобы облегчить автоматическую загрузку ваших классов. Для получения дополнительных знаний Читайте этот.
Для функции _ _ autoload она немного старше spl_autoload_register. Когда вы пишете его в своем коде следующим образом:
function __autoload($classname) {
    $filename = "./". $classname .".php";
    include_once($filename);
}

Эта функция выполняется при создании нового экземпляра из вашего класса. Внутри функции вы сообщаете своему коду, где находятся файлы для загрузки. Как и в приведенной выше функции, он говорит, что файл класса будет назван в честь класса и будет находиться в корневом каталоге.
Проблема с _ _ autoload заключается в том, что он может обеспечить один автопогрузчик, как в следующем коде:
function __autoload($classname) {
    $filename = "./". $classname .".php";
    include_once($filename);
}
/* -- Your code -- */
function __autoload($classname) {
    $filename = $classname .".php";
    include_once($filename);
}

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

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

Для дальнейшего знания, я думаю, что это статья очень полезный.