【发布时间】:2012-01-13 19:35:35
【问题描述】:
如果我在不同的命名空间(以及文件)中有两个类,并且它们都在全局命名空间中调用了一个函数 - 是否有任何方法可以在不传递值的情况下识别哪个命名空间调用了该函数?
namespace A;
class Test { function run() { \func(); }
...
namespace B;
class Test { function run() { \func(); }
...
function func()
{
// Did a class from "\A" call me or "\B"...?
}
我的第一个想法是使用__NAMESPACE__ constant。但这是就地计算的,所以它不能解决这个问题。
【问题讨论】:
-
不知道为什么这是必要的,当然如果函数必须根据调用它的位置来做不同的事情,那么你有两个单独的命名空间函数......如果它需要做一些事情不同的对象,然后将对象作为参数传递给函数
-
@Mark 我的想法完全正确。我想您可以检查调用堆栈或使用某种反射。据我所知,该语言不支持您想要的。
-
@Frits - 对于同等要求stackoverflow.com/questions/743686/…,有很多比 debug_backtrace 更好的方法(例如 __ NAMESPACE __ 常量作为参数传递给函数
-
这是一个奇怪的请求,但 PHP 5.4 的特性很快就会解决这个问题。
-
@Mark - 当然,但我认为关键是命名空间没有作为参数传入(顺便说一句,这不是设计函数的好方法:p)。
标签: php class namespaces