Come posso sapere in quale file e riga è stata definita una determinata funzione?
Come posso sapere in quale file e riga è stata definita una determinata funzione?
Risposte:
Puoi anche farlo in PHP stesso:
$reflFunc = new ReflectionFunction('function_name');
print $reflFunc->getFileName() . ':' . $reflFunc->getStartLine();
$reflFunc = new ReflectionMethod($this, 'method_name');
Se usi un IDE come Netbeans, puoi CTRL + Fare clic sull'uso della funzione e ti porterà dove è definito, supponendo che il file si trovi all'interno della cartella del progetto che hai definito.
Tuttavia, non esiste un codice o una funzione per farlo.
Presumo che per "descritto" si intenda "definito". Per questo, idealmente hai bisogno di un IDE decente che possa farlo.
Ecco una funzione di base che scansionerà i tuoi interi file di progetto per una stringa specifica e ti dirà in quale file si trova e in quale posizione di caratteri inizia usando solo php di base. Spero che questo aiuti qualcuno ...
<?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;
}
?>
Mi piace la soluzione di Tom, quindi ho pensato di poter condividere un po 'più di trucchi con ReflectionFunction (dovrebbe funzionare su ogni PHP 5):
una riga per stampare il nome del file:
print (new ReflectionFunction("foo"))->getFileName();Tieni presente che non ti mostrerà la posizione per le funzioni interne (come _ ), ma può comunque stampare l'API per esso come di seguito.
per stampare la definizione ed i parametri della funzione:
print new ReflectionFunction("foo");
Esempio:
$ php -r 'print new ReflectionFunction("_");'
Function [ <internal:gettext> function _ ] {
- Parameters [1] {
Parameter #0 [ <required> $msgid ]
}
}
$reflFunc->isInternal() === TRUEsignifica che -> getFileName () e -> getStartLine () restituirà FALSE.