可能性の重複:私は(おそらくリフレクションAPIを介して、プログラム的に)知りたい
How to find out where a function is defined?php関数はどこで定義されていますか?
特定のPHPの関数が定義されています。
可能性の重複:私は(おそらくリフレクションAPIを介して、プログラム的に)知りたい
How to find out where a function is defined?php関数はどこで定義されていますか?
特定のPHPの関数が定義されています。
ReflectionFunction
クラスに関連性があると思われるものがあります(getFileName
、getStartLine
など)。
(未テスト)
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;
}
おそらく私は十分にうまくいかなかったかもしれませんが、トレース要素がどこに定義されているかについて実際に何かを伝えていますか? –
@ ashy_32bit:あなたが正しいです、それはそれが定義されているところを実際に示していません。 Reflectionを使用して非推奨関数を記録する方法の例を追加しました – konsolenfreddy
ReflectionMethod::getStartLine()
ReflectionMethod::getFileName()
ReflectionFunction::getStartLine()
ReflectionFunction::getFileName()
は、おそらくそれが最善の解決策ではなく、場合には、あなたは文句を言わないanytingを見つけ、あなたがLinuxを使用している場合grep
コマンドを使用して関数の場所を見つけることができます。
exec('grep -irn "yourFunctionName" ./library', $response);
foreach ($response as $file) {
list($filename, $line) = explode(":", $file);
}
* *はどこですか?どのファイルか、どのクラスか何を意味していますか? – Sarfraz
@Sarfraz私はfile:行を探していましたが、メソッド名を与えて、そのようなメソッドを持つクラスを見つけ出す方法はありますか? –
@ ashy_32bit:要求された情報で質問を更新してください。一般的に、コメントで返信するのではなく、あなたの投稿を更新することによって、明確化の要求に応えます。一つのこととして、コメントを読まなければ問題は理解できるはずです。別の例として、SOはQAとサイトであり、フォーラムではなく、コメントは意図されていない(またそれに適していない)。 – outis