Использование namespace и spl_autoloader’ра

в 22:31, , рубрики: class, php, spl, метки: , ,

Использование namespace и spl autoloaderра

Проблема

Полистав множество станиц в поисковых системах, статьях хабра неоднократно сталкивался с использованием spl_autoload_register. Загрузка файлов с классом почти всегда заключалась в использовании в качестве сепаратора каталогов символа "_". Вот в этом и проблема. В результате имя класса получается примерно «Some_text_to_my_file_name», что, собственно, просто выносит мозг своими размерами и неудобством.

Решение

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

spl_autoload

Autoload'ер изменит свой вид из:

spl_autoload_register(function($className) {
    require_once( str_replace('_', '/', $className) . '.php' );
});

На подобный:

spl_autoload_register(function($className) {
    require_once( str_replace('\', '/', $className) . '.php' );
});

Разница, собственно, не большая, но последствия, по-моему, значительные.

Практика

Допустим, у нас есть обычный Registry(php registry pattern). Он помещен в директорию ./Global/Registry.php и будет иметь вид:

<?php
namespace Global;

class Registry {
...
}

И для использования этого класса у нас будут варианты вызова:

  1. GlobalRegistry::getInstance()
  2. use GlobalRegistry;
    Registry::getInstance();
  3. use GlobalRegistry as GRegistry;
    GRegistry::getInstance();

Вывод

Суть проста, но такой вид гораздо удобнее использовать.

Хочу подчеркнуть, что идея не моя и на права не претендую.

Спасибо.

Автор: spein

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js