2009-09-15 101 views

回答

81

当然,你想要的魔术常量。

function myFunction() { print __FUNCTION__." in ".__FILE__." at ".__LINE__."\n"; } 

了解更多从the php manual

+32

,只是为了厚脸皮,方法的魔法常数名字是:'__METHOD__' – Anthony 2009-09-15 02:43:35

+24

在游戏后期,但我惊讶地发现'__METHOD__'实际上返回'Class :: method',所以'__FUNCTION__'专门返回方法名称......对于任何其他仍然*不像我这样的RTFM。 – Chords 2013-11-12 22:19:33

-4

为什么你不能这样做?

public function something() { 
    $thisMethodName = "something"; 
} 
+8

当'__FUNCTION__'可用时完全没有必要。 – 2009-09-15 02:50:25

+1

不够公平 - 但同样的精神,我可以满足于:__FUNCTION__是不必要的:) – 2009-09-15 02:53:49

+4

如果方法收到一个新名字,开发人员可以忘记更新var内容 – 2014-04-15 14:36:29

1

的hackish,但你也很可能挖掘出来的debug_backtrace()的返回值。

19

尽管您可以使用magic constant__METHOD __”,但我强烈建议您查看php的reflection。这在PHP5中受支持。

$modelReflector = new ReflectionClass(__CLASS__); 
$method = $modelReflector->getMethod(__METHOD__); 

然后你可以踢屁股东西,如检查签名等

+0

当你说“检查签名”时,你的意思是? http://www.php.net/manual/en/function.openssl-verify.php – 2013-12-25 21:14:09

+0

@MrMe不,方法签名(不要与验证签名混淆)如下所示:http://en.wikipedia。 org/wiki/Type_signature – thesmart 2013-12-26 23:33:36

+0

噢好吧,它基本上是Type Hinting http:// stackoverflow。com/questions/2161040/is-method-signature-in-php-a-must-or-should谢谢! – 2013-12-27 10:35:33

10

由于smartj建议你可以试试神奇的常数__METHOD__,但请记住,这将返回包含也是你的类名称的字符串,即'MyClass :: something'。 反而会使用__FUNCTION__返回'something'。

2

使用__FUNCTION__是反潜的方式:

public function something() { 
    $thisMethodName = "something"; 
} 

它在几个方面增加了变数和记忆方法名存储为一个字符串,复制已经存在的东西,从而不必要地增加资源有缺陷使用,(如果你为一个有很多方法的大型图书馆这样做,这很重要)。

PHP中的魔术常数保证不会改变,而如果方法名称被改变,这种方法将需要适当的编辑,从而引入了不一致的可能性(注意,我确实说过可能,这意味着简单地说它是不必要的编辑是否使用了魔法常量)。

命名变量的时间和精力将方法名称重新键入分配给该不必要变量的字符串,当然还要正确地引用变量名称,这是PHP提供魔术常量开始的动机(和驳斥任何索赔__FUNCTION__是不必要的)。