Определение пространства имен

ivanov77

Новичок
Привет.
Как кошерно определять пространство имен объекта? В рефлекшенах что то недокументированное видел, но без этого чтобы.
Так работает:
PHP:
$namespace = dirname(get_class($this));
__NAMESPACE__ не подходит, этот код должен корректно в классах потомках работать
 

WMix

герр M:)ller
Партнер клуба
PHP:
namespace Foo\Bar{
    class Baz{}
}


function getNamespace(object $obj){
    $class = get_class($obj);
    return substr($class, 0, strripos($class, '\\'));
}
echo getNamespace(new Foo\Bar\Baz);
 

ivanov77

Новичок
Зачем?… Кошерно - его не существует. Неймспейс это часть имени класса, а не какая-то отдельная сущность.
Ну вот есть же такая вещь. Я привык что у php есть функции на все случаи жизни, а тут кажется такой примитив, а надо самому.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
рефлексия вообще, и getNamespaceName в частности - это инструмент специального назначения, он нужен для реализации автозагрузки классов по PSR4, фреймвок или composer в автозагрузке парсят namespace и могут найти нужный файл с классом в одноименной директории,
а в коде приложений это использовать не надо
 

ivanov77

Новичок
Вы, простите, на простой вопрос ответить можете?
Для цмс.
У класса в его пространстве имен заложен большой смысл - как логическое так и физическое расположение компонента.
Он не разный для всех классов 😉 , как вы это преподносите - "часть имени класса".
dirname резал глаза своим вроде как не с той оперы.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
класса в его пространстве имен заложен большой смысл - как логическое так и физическое расположение компонента.
Это глупость, конечно. Неймспейс бывает и у функций, например. Неймспейс - это просто часть именования, поэтому он и называется НЕЙМ_спейс.
 

ivanov77

Новичок
Это глупость, конечно. Неймспейс бывает и у функций, например. Неймспейс - это просто часть именования, поэтому он и называется НЕЙМ_спейс.
Если бы это было бы глупостью, люди бы так тщательно не продумывали куда расположить новый класс/функцию.
Расположить по смыслу.
Да и вся PSR4 автозагрузка опирается на эту "глупость".
А для динамического формирования имен вспомогательных классов нужно знать неймспейс текущего класса.
 
Сверху