¿Cómo puedo saber en qué archivo y línea se definió una función determinada?
También puede hacer esto en PHP mismo:
$reflFunc = new ReflectionFunction('function_name');
print $reflFunc->getFileName() . ':' . $reflFunc->getStartLine();
O use un IDE que permita hacerlo (recomendaría Eclipse PDT), o siempre puede grep si está en Linux, o usando wingrep. En Linux sería algo como:
grep -R "function funName" *
desde la carpeta raíz del proyecto.
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;
}
?>
otra forma de verificar dónde está definida la función, intente redefinir la función, el sistema de errores de PHP simplemente devolverá un error que le indica dónde está la función definida previamente
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 ]
}
}
Necesitará un IDE que admita la funcionalidad de "Declaración de función abierta". Una buena opción para php es Eclipse PDT.
Para buscar la definición de la función, resalte el nombre de la función, mantenga presionada la tecla CTRL + Clic en el nombre.
$reflFunc->isInternal() === TRUE
significa que -> getFileName () y -> getStartLine () devolverán FALSE.$reflFunc = new ReflectionMethod($this, 'method_name');