¿Cómo puedo saber en qué archivo y línea se definió una función determinada?
¿Cómo puedo saber en qué archivo y línea se definió una función determinada?
Respuestas:
También puede hacer esto en PHP mismo:
$reflFunc = new ReflectionFunction('function_name');
print $reflFunc->getFileName() . ':' . $reflFunc->getStartLine();
$reflFunc = new ReflectionMethod($this, 'method_name');
Si usa un IDE como Netbeans, puede CTRL + clic en el uso de la función y lo llevará a donde está definido, asumiendo que el archivo está dentro de la carpeta del proyecto que definió.
Sin embargo, no hay ningún código o función para hacer esto.
Supongo que por "descrito" te refieres a "definido". Para esto, idealmente necesita un IDE decente que pueda hacerlo.
Aquí hay una función básica que escaneará todos los archivos de su proyecto en busca de una cadena específica y le dirá en qué archivo se encuentra y en qué posición de caracteres comienza usando solo php básico. Espero que esto ayude a alguien...
<?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;
}
?>
Me gusta la solución de Tom, así que pensé que podría compartir un poco más de trucos con ReflectionFunction (debería funcionar en todos los PHP 5):
una sola línea para imprimir el nombre del archivo:
print (new ReflectionFunction("foo"))->getFileName();
Tenga en cuenta que no le mostrará la ubicación de las funciones internas (como _ ), pero aún puede imprimir la API como se muestra a continuación.
para imprimir la definición y los parámetros de la función:
print new ReflectionFunction("foo");
Ejemplo:
$ php -r 'print new ReflectionFunction("_");'
Function [ <internal:gettext> function _ ] {
- Parameters [1] {
Parameter #0 [ <required> $msgid ]
}
}
$reflFunc->isInternal() === TRUE
significa que -> getFileName () y -> getStartLine () devolverán FALSE.