你能从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"; } 
Interesting Posts