Автозагрузка классов с именами в пространстве имен (абсолютные и относительные), которые соответствуют структуре каталогов - PullRequest
2 голосов
/ 28 ноября 2010

Очевидно, что автозагрузка классов с абсолютными именами в пространстве имен (\ One \ Two \ Three), которые преобразуются в реальные пути к каталогам (One / Two / Three.php), довольно проста.

Однако мне любопытно, еслиесть способ автозагрузки классов, которые были созданы (впервые в процессе PHP), используя имя пространства имен относительно в текущем пространстве имен (например, загрузка Two \ Three из \ One).

Поскольку "__autoload" выполняется в пространстве имен global и принимает только один параметр (имя класса, включая компоненты пространства имен), я не могу понять, как он мог знать, где искатьдля класса.

Однако я предполагаю, что какой-то PHP-мастер нашел решение этой проблемы, поскольку было бы очень неудобно всегда указывать классы по их абсолютному имени в пространстве имен.

Заранее спасибоза любую помощь!

1 Ответ

1 голос
/ 01 апреля 2011

Вы всегда получаете полное пространство имен в вашем автозагрузчике:

<?php
namespace {
    function __autoload($class)
    {
        var_dump($class);die();
    }
}

namespace One {
    new Two\Three();
}
?>

Выход:

string(13) "One\Two\Three"
...