У меня есть некоторый код, такой как:Получить пространство имен объекта с использованием абстрактного класса или признака?
namespace {
trait ns{
public function get_ns(){
var_dump(__NAMESPACE__);
}
}
}
namespace a{
class obj{
use \ns;
}
}
namespace b{
class obj{
use \ns;
}
}
namespace {
$a = new a\obj;
$b = new b\obj;
$a->get_ns();
$b->get_ns();
}
Оба $a->get_ns();
и $b->get_ns();
дамп string(0) ""
вместо string(1) "a"
и string(1) "b"
. Поведение такое же, если я использую абстрактный класс вместо признака.
Это (очевидно), потому что класс признака/абстрактного класса был объявлен в пространстве имен имен, однако я хотел бы, чтобы класс признаков/абстрактных дампов занимал пространство имен реальных объектов (a и b).
Есть ли способ сделать это без создания этой функции в каждом объекте и без прохождения __NAMESPACE__
в качестве аргумента для get_ns()
?
Это тоже определенно работает. Благодарю. –