+

Автозагрузка в PHP. Как это должно быть.

Заметки, Программирование

Метки (теги) : , ,

Автор: masdeft

Вспомним как мы подлючали файлы 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() вызван не будет.

Оставить комментарий

=