【发布时间】:2011-01-28 19:00:00
【问题描述】:
有没有办法确定从函数本身内部调用函数的范围? (或方法;我将在帖子的其余部分中使用函数来表示其中之一。)
我不想将__FILE__ 或__CLASS__ 常量传递给函数。此信息在堆栈跟踪等中可用,所以我知道它在某处浮动,但我想知道如何在运行时自省它而不抛出异常。
如果解决方案有任何性能特殊性,我也想知道这些。
有两个我感兴趣的用例。
- 确定哪个文件/行/函数调用了我的函数
- 确定发起函数调用的类类型
基本上我想要的是这样的:
class util
{
public static function checkScope()
{
echo $magic_scope_stuff;
}
public static function blah()
{
util::checkScope();
}
}
util::checkScope(); // main, line 14
util::blah(); // class util, line 9
【问题讨论】:
-
这个问题不时被问到,所以应该有更多的重复。如果您非常想要,请滥用
debug_backtrace,但总的来说,有这种需求是一种设计气味。在 php.internals 上也讨论并拒绝了在 PHP 中实现这样的功能:marc.info/?l=php-internals&m=125313473914294&w=3 -
@Gordon 感谢阅读材料。