Проблема
Полистав множество станиц в поисковых системах, статьях хабра неоднократно сталкивался с использованием 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 { ... }
И для использования этого класса у нас будут варианты вызова:
- \Global\Registry::getInstance()
- use \Global\Registry;
Registry::getInstance(); - use \Global\Registry as GRegistry;
GRegistry::getInstance();
Вывод
Суть проста, но такой вид гораздо удобнее использовать.
Хочу подчеркнуть, что идея не моя и на права не претендую.
Спасибо.
ссылка на оригинал статьи http://habrahabr.ru/post/167567/
Добавить комментарий