Réponses:
Vous pouvez également le faire en PHP lui-même:
$reflFunc = new ReflectionFunction('function_name');
print $reflFunc->getFileName() . ':' . $reflFunc->getStartLine();
$reflFunc = new ReflectionMethod($this, 'method_name');
Utilisez soit un IDE qui le permet (je recommanderais Eclipse PDT), soit vous pouvez toujours le grep si sur Linux, ou en utilisant wingrep. Sous Linux, ce serait quelque chose comme:
grep -R "function funName" *
depuis le dossier racine du projet.
Si vous utilisez un IDE comme Netbeans, vous pouvez CTRL + Cliquez sur la fonction utilisée et elle vous mènera à l'endroit où elle est définie, en supposant que le fichier se trouve dans le dossier de projet que vous avez défini.
Il n'y a cependant pas de code ou de fonction pour faire cela.
Je suppose que par «décrit», vous voulez dire «défini». Pour cela, vous avez idéalement besoin d'un IDE décent qui peut le faire.
Voici une fonction de base qui analysera l' ensemble de vos fichiers de projet pour une chaîne spécifique et vous indiquera dans quel fichier il se trouve et à quelle position de caractère il commence en utilisant uniquement le php de base. J'espère que cela aide quelqu'un ...
<?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;
}
?>
J'aime la solution de Tom, alors j'ai pensé que je pourrais partager un peu plus d'astuces avec ReflectionFunction (cela devrait fonctionner sur chaque PHP 5):
une ligne pour imprimer le nom de fichier:
print (new ReflectionFunction("foo"))->getFileName();
Veuillez noter qu'il ne vous montrera pas l'emplacement des fonctions internes (telles que _ ), mais il peut toujours imprimer l'API comme ci-dessous.
pour imprimer la définition et les paramètres de la fonction:
print new ReflectionFunction("foo");
Exemple:
$ php -r 'print new ReflectionFunction("_");'
Function [ <internal:gettext> function _ ] {
- Parameters [1] {
Parameter #0 [ <required> $msgid ]
}
}
$reflFunc->isInternal() === TRUE
signifie -> getFileName () et -> getStartLine () renverra FALSE.