¿Cómo puedo averiguar en qué archivo y línea se definió una función determinada?¿Cómo saber dónde se define una función?
Respuesta
También puede hacer esto en el propio PHP:
$reflFunc = new ReflectionFunction('function_name');
print $reflFunc->getFileName() . ':' . $reflFunc->getStartLine();
Supongo que por "descrito" quiere decir "definido". Para esto, idealmente necesitas un IDE decente que pueda hacerlo.
Estoy usando Aptana, que tiene búsqueda de texto a través del proyecto. Pero para usarlo necesito importar el sitio del agujero (muy grande) como un proyecto. – SaltLake
Si usa un IDE como Netbeans, puede presionar 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 código o función para hacerlo.
O utilice 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 así como:
grep -R "function funName" *
dentro de la carpeta raíz del proyecto.
es mejor tener: grep -R "function \ sfunName" * – David
Necesitará un IDE que admita la funcionalidad de "Declaración de función abierta". Un bien 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 + haga clic en el nombre.
Heres una función básica que escaneará sus archivos completos de proyectos una cadena específica y le dirá qué archivo se encuentra y qué posición se Char comienza utilizando 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;
}
?>
¡use 'grep' en su lugar! –
me gusta la solución de Tom, así que pensé que podría compartir un poco más trucos con ReflectionFunction (que debería funcionar en todos los PHP 5):
uno -liner para imprimir el nombre del archivo:
print (new ReflectionFunction("foo"))->getFileName();
Tenga en cuenta que no le mostrará la ubicación fo r internal funciones (como _), pero todavía puede imprimir la API para ello como 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 ] } }
Otra forma de comprobar dónde la función definida, tratar de redefinir el función, el sistema de error de PHP simplemente devuelve un error que le indicó dónde estaba la función previamente definida
- 1. ¿Cómo saber en qué biblioteca se define una función específica?
- 2. ¿Dónde se define la función err_sys()?
- 3. Rieles: ¿Dónde se define "params"?
- 4. ¿Cómo puedo encontrar dónde se define una constante en Ruby?
- 5. ¿Cómo se define la función en .emacs?
- 6. ¿Dónde se define ptrdiff_t en C?
- 7. node.js Internals: ¿Cómo puedo averiguar dónde se define `process.binding ('eval')`?
- 8. ¿Cómo se define una nueva función ('operador') en MathJax?
- 9. ¿Cómo se define un tipo para una función en Scala?
- 10. ¿Cómo se define una función general en mathematica?
- 11. ¿Cómo se define una función en ghci en múltiples líneas?
- 12. ¿Cómo se define o elimina una función javascript?
- 13. Determinar dónde se define un tipo
- 14. Dónde se define C++ size_t en Linux
- 15. ¿Dónde se define la macro DEBUG?
- 16. ¿Dónde se define instance_eval en Ruby 1.9.2?
- 17. Cómo saber dónde se define alias (en el sentido bash) cuando se ejecuta Terminal en Mac OS X
- 18. ¿Cómo se define (?) Internamente?
- 19. Pasar argumentos cero como params - ¿dónde se define el comportamiento?
- 20. Determine dónde se define un alias de UNIX
- 21. La función no se define en setInterval
- 22. ¿Cómo saber dónde se debe usar la palabra clave AS?
- 23. RoR: ¿Dónde se define la ruta "carriles/información/propiedades"?
- 24. ¿Cómo puedo saber dónde se me redirigirá utilizando cURL?
- 25. ¿Cómo encontrar de dónde se importó una función en Python?
- 26. ¿Cómo se define la función defmacro utilizando solo primitivas LISP?
- 27. Cómo saber si se define una variable (-v) en la línea de comandos (SQLCMD)
- 28. ¿Cómo se define threadsafe?
- 29. ¿Cómo puedo saber dónde se encuentra Python en Unix?
- 30. Cómo saber dónde está el error mientras se ejecuta ctest
+1 para resolver esto con PHP en lugar del IDE. Buena idea. – Gordon
Consejo: '$ reflFunc-> isInternal() === TRUE' significa -> getFileName() y -> getStartLine() devolverá FALSE. –
esto no funcionó para mí – Ash