2010-02-08 24 views

Respuesta

170

También puede hacer esto en el propio PHP:

$reflFunc = new ReflectionFunction('function_name'); 
print $reflFunc->getFileName() . ':' . $reflFunc->getStartLine(); 
+6

+1 para resolver esto con PHP en lugar del IDE. Buena idea. – Gordon

+8

Consejo: '$ reflFunc-> isInternal() === TRUE' significa -> getFileName() y -> getStartLine() devolverá FALSE. –

+0

esto no funcionó para mí – Ash

1

Supongo que por "descrito" quiere decir "definido". Para esto, idealmente necesitas un IDE decente que pueda hacerlo.

+0

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

3

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.

+0

Lo mismo en Zend Studio y supongo que esto también funcionará con PDT para Eclipse. – Gordon

+0

@Gordon "un IDE como" Creo que esto es imprescindible para _un_ IDE moderno ... – feeela

+1

Pero hay un código para hacer esto –

11

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.

+5

es mejor tener: grep -R "function \ sfunName" * – David

0

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.

2

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; 
} 
?> 
+3

¡use 'grep' en su lugar! –

1

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 ] 
        } 
    } 
    
1

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

Cuestiones relacionadas