02
Автозагрузка в PHP. Как это должно быть.
Заметки, Программирование
Метки (теги) : autoloading, php, автозагрузка
Вспомним как мы подлючали файлы MyClass.php который в себе содержит класс MyClass, перед тем как создать экземпляр.
require 'MyClass.php';
Еще в те “старые дни” мы использовали магический метод __autoload() который вызывается в том случае, когда указанный класс не найден. Но у этого метода есть серьёзные недостатки. Во первых Вы можете предоставить только один автозагрузчик Вашему приложению, во вторых вы не можете вызвать данный метод как элемент класса. В PHP 5.1.2 представлени метод spl_autoload_register(), который позволяет вызывать множество методов атозагрузчиков.
<?php class Autoloader { public function __construct() { spl_autoload_register(array($this, 'load')); } public function load($className) { set_include_path(dirname(__FILE__)); include_once $className . '.php'; } }
При создании экземпляра класса Autoloader в конструкторе вызывается метод spl_autoload_register() с аттрибутом array($this, ‘load’), который указывает тип(класс) и метод автозагрузчик. При обращении к несуществующему классу будет вызван метод load().
// TestClass.php class TestClass { public function __construct() { echo 'class Test is called.'; } }
// index.php require_once 'Autoloader.php'; $autoloader = new Autoloader(); $newObject = new TestClass();
//результат class Test is called.
После вызова spl_autoload_register() метод __autoload() вызван не будет.