2012-03-10 24 views
1

可能性の重複:私は(おそらくリフレクションAPIを介して、プログラム的に)知りたい
How to find out where a function is defined?php関数はどこで定義されていますか?

特定のPHPの関数が定義されています。

+1

* *はどこですか?どのファイルか、どのクラスか何を意味していますか? – Sarfraz

+0

@Sarfraz私はfile:行を探していましたが、メソッド名を与えて、そのようなメソッドを持つクラスを見つけ出す方法はありますか? –

+0

@ ashy_32bit:要求された情報で質問を更新してください。一般的に、コメントで返信するのではなく、あなたの投稿を更新することによって、明確化の要求に応えます。一つのこととして、コメントを読まなければ問題は理解できるはずです。別の例として、SOはQAとサイトであり、フォーラムではなく、コメントは意図されていない(またそれに適していない)。 – outis

答えて

5

ReflectionFunctionクラスに関連性があると思われるものがあります(getFileNamegetStartLineなど)。

(未テスト)

1

debug_backtrace()すべての呼び出しが行われた状態で配列し、また関数/メソッドの定義をバック与えます。リフレクションクラスは、関数の定義を提供します。

私は、古いプロジェクト内deprectated機能をログに記録し、これを使用します。

function logDeprecated() { 
    $trail = debug_backtrace(); 
    if ($trail[1]['type']) { 
     $function = new ReflectionMethod($trail[1]['class'], $trail[1]['function']); 
    } else { 
     $function = new ReflectionFunction($trail[1]['function']); 
    } 
    $errorMsg = 'Function ' . $trail[1]['function']; 
    if ($trail[1]['class']) { 
     $errorMsg .= ' of class ' . $trail[1]['class']; 
    } 
    $errorMsg .= ' is deprecated (called from ' . $trail[1]['file'] . '#' . $trail[1]['line'] . ', defined in ' . $function->getFileName() . '#' . $function->getStartLine() . ')'; 
     return $errorMsg; 
} 
+0

おそらく私は十分にうまくいかなかったかもしれませんが、トレース要素がどこに定義されているかについて実際に何かを伝えていますか? –

+0

@ ashy_32bit:あなたが正しいです、それはそれが定義されているところを実際に示していません。 Reflectionを使用して非推奨関数を記録する方法の例を追加しました – konsolenfreddy

1
ReflectionMethod::getStartLine() 
ReflectionMethod::getFileName() 
ReflectionFunction::getStartLine() 
ReflectionFunction::getFileName() 
0

は、おそらくそれが最善の解決策ではなく、場合には、あなたは文句を言わないanytingを見つけ、あなたがLinuxを使用している場合grepコマンドを使用して関数の場所を見つけることができます。

exec('grep -irn "yourFunctionName" ./library', $response); 
foreach ($response as $file) { 
    list($filename, $line) = explode(":", $file); 
} 
関連する問題