Antworten:
Sie können dies auch in PHP selbst tun:
$reflFunc = new ReflectionFunction('function_name');
print $reflFunc->getFileName() . ':' . $reflFunc->getStartLine();
$reflFunc = new ReflectionMethod($this, 'method_name');
Verwenden Sie entweder eine IDE, die dies ermöglicht (ich würde Eclipse PDT empfehlen), oder Sie können sie immer unter Linux oder mit Wingrep abrufen. Unter Linux wäre es ungefähr so:
grep -R "function funName" *
aus dem Stammordner des Projekts.
Wenn Sie eine IDE wie Netbeans verwenden, können Sie STRG + Klicken Sie auf die verwendete Funktion. Sie gelangen dorthin, wo sie definiert ist, vorausgesetzt, die Datei befindet sich in dem von Ihnen definierten Projektordner.
Es gibt jedoch keinen Code oder keine Funktion, um dies zu tun.
Ich gehe davon aus, dass Sie mit "beschrieben" "definiert" meinen. Dafür benötigen Sie idealerweise eine anständige IDE, die dies kann.
Hier ist eine grundlegende Funktion, die Ihre gesamten Projektdateien nach einer bestimmten Zeichenfolge durchsucht und Ihnen mitteilt, in welcher Datei sie sich befindet und an welcher Zeichenposition sie beginnt, indem sie nur einfaches PHP verwendet. Hoffe das hilft jemandem ...
<?php
$find="somefunction()";
echo findString('./ProjectFolderOrPath/',$find);
function findString($path,$find){
$return='';
ob_start();
if ($handle = opendir($path)) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
if(is_dir($path.'/'.$file)){
$sub=findString($path.'/'.$file,$find);
if(isset($sub)){
echo $sub.PHP_EOL;
}
}else{
$ext=substr(strtolower($file),-3);
if($ext=='php'){
$filesource=file_get_contents($path.'/'.$file);
$pos = strpos($filesource, $find);
if ($pos === false) {
continue;
} else {
echo "The string '$find' was found in the file '$path/$file and exists at position $pos<br />";
}
}else{
continue;
}
}
}
}
closedir($handle);
}
$return = ob_get_contents();
ob_end_clean();
return $return;
}
?>
Ich mag Toms Lösung, also dachte ich, ich könnte ein bisschen mehr Tricks mit ReflectionFunction teilen (es sollte auf jedem PHP 5 funktionieren):
Einzeiler zum Drucken des Dateinamens:
print (new ReflectionFunction("foo"))->getFileName();Bitte beachten Sie, dass der Speicherort für interne Funktionen (z. B. _ ) nicht angezeigt wird, die API jedoch wie folgt gedruckt werden kann.
So drucken Sie die Definition und die Parameter der Funktion:
print new ReflectionFunction("foo");
Beispiel:
$ php -r 'print new ReflectionFunction("_");'
Function [ <internal:gettext> function _ ] {
- Parameters [1] {
Parameter #0 [ <required> $msgid ]
}
}
$reflFunc->isInternal() === TRUEbedeutet, dass -> getFileName () und -> getStartLine () FALSE zurückgeben.