Это возможно, только если метод не вызывается из глобальной области. Это потому, что нет реального способа вернуть его (пожалуйста, кто-то меня поправьте сюда, если это не так!). Самое простое решение - поместить ваш вызов в функцию. Скорее всего, вы будете использовать метод в любом случае, если вы это делаете. Если это так, то вы можете использовать комбинацию функции debug_backtrace и класс отражения:
file1.php:
<?php
namespace myns;
require 'file2.php';
function example($class) {
echo $class->nstest();
}
$class = new \myotherns\someclass();
echo example($class);
file2.php:
<?php
namespace myotherns;
class someclass {
function nstest() {
$backtrace = debug_backtrace();
$caller = end($backtrace);
$reflection = new \ReflectionFunction($caller['function']);
return $reflection->getNamespaceName();
}
}
Или все в одном файле :
<?php
namespace myns {
$someclass = new \myotherns\someclass();
echo example($someclass);
function example($class) {
echo $class->nstest();
}
}
namespace myotherns {
class someclass {
function nstest() {
$backtrace = debug_backtrace();
$caller = end($backtrace);
$reflection = new \ReflectionFunction($caller['function']);
return $reflection->getNamespaceName();
}
}
}
Вот online demo
Вам нужно будет настроить его в зависимости от того, как вы в конечном итоге вызываете свой метод, но он должен быть достаточно простым.
__NAMESPACE__ постоянный. http://php.net/manual/en/language.namespaces.nsconstants.php В чем проблема? –
@IgorGreg '__NAMESPACE__' относится к текущему пространству имен. Если он не передаст это в качестве аргумента, здесь это нехорошо. (Я предполагаю, что это не вариант) – rjdown
@rjdown Это действительно не вариант. – Xesau