Я классовую структуру (дерево), как это:PHP каталог имен автоматической загрузки
- garcha/
| - html/
| Tag.php
| VTag.php
| etc..
Что работает: (авто-нагружен spl_autoload_register)
use garcha\html;
$tag = new html\Tag('a');
Не удается:
use garcha\html;
$tag = new Tag('a');
Чтобы добиться этого без: (я не хочу писать use
заявление линии каждого класса файла построчно, то, чтобы указать на каталог класс и использовать классы без родительского пространства имен)
use garcha\html\Tag;
use garcha\html\VTag;
...
Я не» т, как таким образом, потому, что это скучный, нужно больше времени, менее гибкий (вы можете изменить структуру файла, имя класса и т.д ..)
в двух словах: Я пытаюсь автоматической загрузки класса в пространстве имен каталог и использовать в нем классы с неквалифицированными именами.
Авто-погрузчик функция:
class AutoLoader
{
protected static $pathes = array();
/**
* add pathes
*
* @param string $path
*/
public static function addPath($path)
{
$path = realpath($path);
if ($path)
{
self::$pathes[] = $path . DIRECTORY_SEPARATOR;
}
}
/**
* load the class
* @param string $class
* @return boolean
*/
public static function load($class)
{
$classPath = $class.'.php'; // Do whatever logic here
foreach (self::$pathes as $path)
{
if (is_file($path . $classPath))
{
require_once $path . $classPath;
return true;
}
}
return false;
}
}
Добавление пути:
AutoLoader::addPath(BASE_PATH.DIRECTORY_SEPARATOR.'vendor');
авто-погрузочные работы, вопрос о том, как обращаться с
use garcha\html; // class directory
и использовать классы без l eading html
$tag = new Tag('p'); // not $tag = new html\Tag('p');
что ваш 'самостоятельно :: $ pathes' установлен – GGio
Почему бы не использовать полный путь пространства имен? Вам придется изменить его, если вы измените путь позже, 'use' или не – Machavity
@GGio Я обновил вопрос –