我有一个非常简单的问题,但答案可能相当复杂。"如何获得函数调用所在块的名称空间?"
所以,当我这样做的时候:
1. <?php
2. namespace TestTest;
3.
4. $myobj->doMethod();
$myobj-> method()如何知道第4行上的命名空间。测试吗?
这只有在方法没有从全局作用域调用时才有可能。这是因为没有真正的方法可以回溯它(如果不是这样,请有人在这里纠正我!)。最简单的解决方案是将调用放在函数中。如果你在做这类事情,你很可能会使用一个方法。如果是这种情况,那么您可以使用debug_backtrace函数和反射类的组合:
file1.php:
<?php
namespace myns;
require 'file2.php';
function example($class) {
echo $class->nstest();
}
$class = new 'myotherns'someclass();
echo example($class);
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();
}
}
}
这是一个在线演示
你需要根据你最终如何调用你的方法来调整它,但它应该足够简单。