2010-02-08 13 views

risposta

170

Si potrebbe anche fare questo in PHP stesso:

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

+1 per risolvere questo con PHP invece dell'IDE. Bella idea – Gordon

+8

Suggerimento: '$ reflFunc-> isInternal() === TRUE' significa -> getFileName() e -> getStartLine() restituirà FALSE. –

+0

questo non ha funzionato per me – Ash

1

Suppongo che per "descritto" intendi "definito". Per questo, hai idealmente bisogno di un IDE decente in grado di farlo.

+0

Sto usando Aptana che ha la ricerca del testo attraverso il progetto. Ma per usarlo ho bisogno di importare il foro (molto grande) come progetto. – SaltLake

3

Se si utilizza un IDE come Netbeans, è possibile CTRL + fare clic sulla funzione utilizzata e vi porterà dove è definito, supponendo che il file si trovi nella cartella del progetto definita.

Non c'è alcun codice o funzione per fare questo però.

+0

Lo stesso in Zend Studio e presumo che funzionerà anche con PDT per Eclipse. – Gordon

+0

@Gordon "un IDE come" Penso che questo sia un must per _any_ moderno IDE ... – feeela

+1

Ma c'è un codice per fare questo –

11

O utilizzare un IDE che consenta di farlo (vorrei raccomandare Eclipse PDT), oppure è sempre possibile eseguire il comando grep se su Linux o utilizzando wingrep. In Linux sarebbe qualcosa di simile:

grep -R "function funName" * 

dall'interno della cartella principale del progetto.

+5

meglio avere: grep -R "function \ sfunName" * – David

0

Avrete bisogno di un IDE che supporti la funzionalità "Open Function Declaration". Una buona idea per php è Eclipse PDT.

Per cercare la definizione della funzione, evidenziare il nome della funzione, tenere premuto CTRL + Fare clic sul nome.

2

Heres una funzione di base che esplorerà i vostri file intero progetto per una stringa specifica e ti dirà quale file è dentro e quale posizione si char inizia a utilizzare 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; 
} 
?> 
+3

usa 'grep' invece! –

1

Mi piace la soluzione di Tom, così ho pensato che avrei potuto condividere un po 'più trucchi con ReflectionFunction (dovrebbe funzionare su tutti i PHP 5):

  • uno -liner per stampare il nome del file:

    print (new ReflectionFunction("foo"))->getFileName(); 
    

si prega di notare che non vi mostrerà la posizione fo r internal funzioni (ad esempio _), ma è comunque possibile stampare l'API per esso come di seguito.

  • per stampare la definizione ei parametri della funzione:

    print new ReflectionFunction("foo"); 
    

    Esempio:

    $ php -r 'print new ReflectionFunction("_");' 
    Function [ <internal:gettext> function _ ] { 
        - Parameters [1] { 
        Parameter #0 [ <required> $msgid ] 
        } 
    } 
    
1

altro modo per controllare dove viene la funzione definita, provare a ridefinire la funzione, sistema di errore di PHP restituirà semplicemente un errore ti ha detto dove la funzione precedentemente definita

Problemi correlati