2009-09-15 38 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__是不必要的)。