Всем привет. В этом материале я расскажу про автоматическое подключение файлов в php с помощью spl_autoload .

Автоматическая загрузка классов в PHP с использованием spl_autoload.

Всем привет. В этом материале я расскажу про автоматическое подключение файлов в php с помощью spl_autoload.

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

Внутрь функции spl_autoload_register вы можете передать анонимную, или лямбда функцию, которая будет что-то делать, например, подключать файлы.

<?php
  spl_autoload_register(function($name) {
   require 'classes/'.$name.'.php';
  });
?>

Также, вы можете вынести эту функцию отдельно, а в spl_autoload_register передать строковое значение с названием вашей функции.

<?php
  function autoLoader($name) {
   require 'classes/'.$name.'.php';
  }

  spl_autoload_register('autoLoader');
?>

С помощью spl_autoload_extensions вы можете указать значения расширений по-умолчанию для функции spl_autoload.

spl_autoload_extensions('.php');
spl_autoload_register();

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

spl_autoload_extensions('.php, .php4, .php3, .class.php');

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

spl_autoload_register('autoLoader1');
spl_autoload_register('autoLoader2');

Если вы хотите посмотреть все зарегистрированные функции, то вы можете воспользоваться функцией spl_autoload_functions, которая возвращает массив.

print_r(spl_autoload_functions());

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

spl_autoload_unregister('autoLoader1');

Вот и все, что нужно знать об этой возможности. Используйте именно этот автозагрузчик, а не магический метод __autoload(), потому что spl_autoload более гибок и новее. Спасибо за внимание и удачного кодинга!