2009-06-17 19 views
184

可能ですか?PHPの関数内で関数名を取得するにはどうすればよいですか?

function test() 
{ 
    echo "function name is test"; 
} 
+1

これはいつ必要なのですか?あなたが名前を知らない関数を作成することは可能ですか? – DisgruntledGoat

+30

1つの可能な使用方法は、実行を記録することです。あなたが "私は間違いがあった"と書いているなら。 __FUNCTION__をログファイルなどに変換します。このようにして、関数名が変更された場合、ログメッセージを変更することを忘れないでください。 –

+1

これはロギングに必要です!尋ねてくれてありがとう:) – SublymeRick

答えて

85

あなたがPHP 5を使用している場合、あなたはあなたが試すことができ、それがメソッドまたは関数の場合... =)

+38

__METHOD__にはクラス名が含まれ、__FUNCTION__はそれだけです。後者はクラスのメソッドでも同様に使用できます。 –

+3

それは本当です。しかし、methodNameの代わりにMyClass :: methodNameを取得すると便利なことがよくあります。 – PatrikAkerstrand

+6

+1、 '__METHOD__'は' __FUNCTION__'よりも具体的です。 – l0b0

13

に応じてmagic constants__METHOD__(クラス名を含みます)または__FUNCTION__(名前だけを機能)を使用することができますこの:

function a() { 
    $trace = debug_backtrace(); 
    echo $trace[0]["function"]; 
} 
+11

これは信じられないほどリソースを大量に消費します。 __FUNCTION__または__METHOD__を使用する方がはるかに効率的です。 debug_backtrace()は、関数名以上のものが必要な場合に最適です。 –

+1

この目的のためにdebug_backtrace()を使うのは悪い習慣です –

+1

これは**ただ正しい方法です**私は見つけました!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!! !!!!!!!!!!!!!! '__FUNCTION__'が親関数名を返すので(現在の関数が親関数に含まれている場合) –

関連する問題