你能从PHP中的方法中获得方法名称吗?
有没有可能做这样的事情?
public function something() { $thisMethodName = method_get_name(); }
where method_get_name()
返回方法的名字?
当然,你需要魔术常数。
function myFunction() { print __FUNCTION__." in ".__FILE__." at ".__LINE__."\n"; }
从php手册了解更多信息
虽然你可以使用魔术常数 “ __METHOD
__”,但我强烈推荐检查php的reflection 。 这在PHP5中受支持。
$modelReflector = new ReflectionClass(__CLASS__); $method = $modelReflector->getMethod(__METHOD__);
然后,你可以做踢屁股东西,如检查签名等
正如smartjbuild议你可以尝试魔术常数__METHOD__
,但是请记住,这将返回一个包含你的类名的string,即'MyClass :: something'。 反而使用__FUNCTION__
会返回'something'。
黑客,但你也可以挖出debug_backtrace()返回值。
使用__FUNCTION__
是要走的路,而不是:
public function something() { $thisMethodName = "something"; }
有几种方式存在缺陷,即添加一个variables和内存,将方法名称存储为一个string,并复制已经存在的内容,从而不必要地添加使用的资源(如果为具有多种方法的大型库执行此操作,则非常重要)。
在PHP中的魔术常量保证不会改变,而这种方法将需要适当的编辑,如果方法名称被改变,从而引入了潜在的不一致性(注意,我曾经说过,潜在的,也就是说,如果魔术是不必要的编辑常数被用来代替)。
命名variables的时间和精力,将方法名称重新键入分配给该不必要variables的string,当然还要正确地引用variables名称,这是PHP提供魔法常量开始的动机(并拒绝任何声明__FUNCTION__
是不必要的)。
你为什么不能这样做?
public function something() { $thisMethodName = "something"; }