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

от автора

Проблема

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

Решение

Задача значительно упрощается, если начать использовать пространства имен. Вкратце, имя класса будет иметь вид \Some\text\to\my\file\name, что более похоже на адрес файла и добавляет функционал пространства имен в процесс подгрузки.

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. \Global\Registry::getInstance()
  2. use \Global\Registry;
    Registry::getInstance();
  3. use \Global\Registry as GRegistry;
    GRegistry::getInstance();

Вывод

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

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

Спасибо.

ссылка на оригинал статьи http://habrahabr.ru/post/167567/


Комментарии

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *