Автоподгрузка классов в PHP 5.3 — 5.4

С переходом на новую версию PHP 5.4 мне пришлось пересмотреть свои методы автоподгрузки классов.  Если вы используете пространство имён то вам необходимо немного иначе пользоваться возможностями автоподгрузки классов.

Итак немного сравнения. В версии PHP 5.2.17 я писал:

 


function __autoload($class){

global  $_SETTINGS;

$files['UPLOAD_FILES'] = $_SETTINGS['doc_dir'].'/vcontrol/core/upload.class.php';
$files['WMThumbnail'] = $_SETTINGS['doc_dir'].'/vcontrol/core/thumbnail/wmthumbnail.class.php';

if (!isset($files[$class])) return ;
require_once ($files[$class]);

}

И при создании экземпляра класса например UPLOAD_FILES ( Ex: $upload  = new UPLOAD_FILES ) , файл содержащий класс сам подгружался ($files[‘UPLOAD_FILES’] = $_SETTINGS[‘doc_dir’].’/vcontrol/core/upload.class.php’;).

Недостатками использования функции __autoload() является то что:

  1. нельзя переопределять ее в процессе работы.
  2. нет возможности активировать и деактивировать автопродгрузку в процессе работы

Все это предоставляет стандартное расширение SPL доступное в php с версии PHP 5.1.2.

Рассмотрим пример работы с этим расширением:

Напишем свой класс с методом для подгрузки классов:


class Autoload {

public static function loadClass($className) {
global $_SETTINGS;
$class = explode('\\', $className);
$files['UPLOAD_FILES'] = $_SETTINGS['doc_dir'] . '/vcontrol/core/upload.class.php';
$files['WMThumbnail'] = $_SETTINGS['doc_dir'] . '/vcontrol/core/thumbnail/wmthumbnail.class.php';
$key = $class[count($class) - 1];
if (is_file($files[$key])) {
require_once $files[$key];
} else {
echo ('Файл ' . $files[$key] . ' не найден!');
}
}

}

Обратите внимание что название класса $className передаётся в функцию вместе с пространством имён. Т .е в таком виде APPLICATION\SUBNAMESPACE\Classname.

А теперь собственно активация автоподгрузчика:


spl_autoload_register(array('Autoload ','loadClass'));

Также с помощью функции spl_autoload_unregister() деактивировать автозагрузчик классов.


spl_autoload_unregister(array('Autoload ','loadClass'));

 

2 Ответы на “Автоподгрузка классов в PHP 5.3 — 5.4”

Добавить комментарий