¿Cómo obtener la lista de las funciones que se declaran en un archivo PHPLista de funciones del archivo PHP
Respuesta
Puede utilizar la función get_defined_functions()
para obtener toda función definida en el script actual.
Ver: http://www.php.net/manual/en/function.get-defined-functions.php
Si desea obtener las funciones definidas en otro archivo, puede probar a usar http://www.php.net/token_get_all así:
$arr = token_get_all(file_get_contents('anotherfile.php'));
Entonces puede recorrer para encontrar fichas de función con los símbolos definido. La lista de fichas se puede encontrar http://www.php.net/manual/en/tokens.php
Puede obtener una lista de la función definida actualmente mediante el uso de get_defined_functions()
:
$arr = get_defined_functions();
var_dump($arr['user']);
funciones internas son en el índice internal
mientras que la función definida por el usuario en el índice son user
.
Tenga en cuenta que esto generará todas las funciones que se declararon antes de esa llamada. Lo que significa que si tiene include()
archivos con funciones, esos también estarán en la lista. No hay forma de separar funciones por archivo que no sea asegurarse de que no include()
ningún archivo antes de la llamada al get_defined_functions()
.
Si debe tener la lista de funciones por archivo, el siguiente intentará para recuperar una lista de funciones mediante el análisis de la fuente.
function get_defined_functions_in_file($file) {
$source = file_get_contents($file);
$tokens = token_get_all($source);
$functions = array();
$nextStringIsFunc = false;
$inClass = false;
$bracesCount = 0;
foreach($tokens as $token) {
switch($token[0]) {
case T_CLASS:
$inClass = true;
break;
case T_FUNCTION:
if(!$inClass) $nextStringIsFunc = true;
break;
case T_STRING:
if($nextStringIsFunc) {
$nextStringIsFunc = false;
$functions[] = $token[1];
}
break;
// Anonymous functions
case '(':
case ';':
$nextStringIsFunc = false;
break;
// Exclude Classes
case '{':
if($inClass) $bracesCount++;
break;
case '}':
if($inClass) {
$bracesCount--;
if($bracesCount === 0) $inClass = false;
}
break;
}
}
return $functions;
}
Utilice bajo su responsabilidad.
get_defined_functions() obtiene todas mis funciones declaradas de todos los archivos, ¡no de un solo archivo! – zumrasha
@zumrasha: consulte mi respuesta actualizada, que le proporcionará una lista de funciones disponibles por archivo. –
Cualquiera que use esto puede querer agregar 'T_CURLY_OPEN' al interruptor para capturar cadenas como' "hola {$ nombre}" ' – Twifty
sí incluyen al archivo y probar esto:
$functions = get_defined_functions();
print_r($functions['user']);
Puede utilizar get_defined_functions() antes y después de incluir el archivo, y mirar a lo que se añade a la matriz del segundo tiempo. Ya que parecen estar en orden de definición, sólo puede utilizar el índice de la siguiente manera:
$functions = get_defined_functions();
$last_index = array_pop(array_keys($functions['user']));
// Include your file here.
$functions = get_defined_functions();
$new_functions = array_slice($functions['user'], $last_index);
bien por cualquier razón, si usted necesita para hacer esto os muestro: archivo
Ejemplo: Funciones.php (que acabo de escribir algunas cosas al azar no lo hace Mather funciona con todo)
<?php
// gewoon een ander php script. door het gebruiken van meerdere includes kun je gemakkelijk samen aan één app werken
function johannes($fnaam, $mode, $array){
switch ($mode) {
case 0:
echo "
<center>
<br><br><br><br><br>
he johannes!<br><br>
klik hier voor random text:<br>
<input type='submit' value='superknop' id='btn' action='randomding' level='0' loadloc='randomshit' />
<p id='randomshit'></p>
</center>
";
break;
case 1:
echo "bouw formulier";
break;
case 2:
echo "verwerk formulier";
break;
default:
echo "[Error: geen mode gedefinieerd voor functie '$fnaam'!]";
}
}
function randomding($fnaam, $mode, $array){
$randomar = array('He pipo wat mot je!','bhebhehehehe bheeeee. rara wie ben ik?','poep meloen!','He johannes, wat doeeeeee je? <input type="text" name="doen" class="deze" placeholder="Wat doe je?" /> <input type="button" value="vertellen!" id="btn" action="watdoetjho" level="0" loadloc="hierzo" kinderen="deze"> <p id="hierzo"></p>','knopje de popje opje mopje','abcdefghijklmnopqrstuvwxyz, doe ook nog mee','Appien is een **p!!!!!! hahhahah<br><br><br><br> hahaha','Ik weet eiegelijk niks meer te verzinnen','echt ik weet nu niks meer','nou oke dan[[][(!*([email protected]#&*$*^éäåðßð','he kijk een microboat: <br> <img src="https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcS_n8FH6xzf24kEc31liZF6ULHCn2IINFurlFZ_G0f0_F4sLTi74w" alt="microboat" />');
$tellen = count($randomar);
$tellen--;
$rand = rand(0, $tellen);
echo $randomar[$rand];
}
function watdoetjho($fnaam, $mode, $array){
$dit = $array['doen'];
echo "Johannes is: $dit";
}
?>
Tenemos 3 funciones en el interior aquí:
- Johannes
- randomding
- watdoetjho
Pero también llamamos a estas funciones:
- recuento
- rand
Si utilizamos get_defined_functions
obtendremos todas las funciones dentro de alcance de secuencia de comandos. Sí, las funciones PHP están separadas de las declaradas por el usuario, pero aún queremos de un archivo específico.
Si usamos token_get_all
, recibiremos una gran cantidad de datos que necesitamos separar primero.
Encontré este número que necesitamos hacer algunas conexiones dentro de la matriz para que coincida con las funciones del usuario. De lo contrario, tendremos una lista que incluye todas las funciones de php a las que se recurre.
Los números son:
- 334 (lista de todos los usuarios funciones declaradas)
- 307 (Lista de todos los nombres de función)
Si filtramos la matriz de tomar todos los 334 elementos que tienen esta:
334 - | - función - | - 5
Pero necesitamos el nombre de la función y todos los elementos de la matriz están en relación con el 3er valor. Así que ahora tenemos que filtrar toda la bruja elementos de la matriz coincide con el valor 3rth (5) y el número constante 307.
Esto nos dará algo como esto:
307 - | - Johannes - | - 5
Ahora en PHP que se verá así:
<?php
error_reporting(E_ALL^E_NOTICE); // Or we get these undefined index errors otherwise use other method to search array
// Get the file and get all PHP language tokens out of it
$arr = token_get_all(file_get_contents('Functions.php'));
//var_dump($arr); // Take a look if you want
//The array where we will store our functions
$functions = array();
// loop trough
foreach($arr as $key => $value){
//filter all user declared functions
if($value[0] == 334){
//Take a look for debug sake
//echo $value[0] .' -|- '. $value[1] . ' -|- ' . $value[2] . '<br>';
//store third value to get relation
$chekid = $value[2];
}
//now list functions user declared (note: The last chek is to ensure we only get the first peace of information about the function witch is the function name, else we also list other function header information like preset values)
if($value[2] == $chekid && $value[0] == 307 && $value[2] != $old){
// just to see what happens
echo $value[0] .' -|- '. $value[1] . ' -|- ' . $value[2] . '<br>';
$functions[] = $value[1];
$old = $chekid;
}
}
?>
el resultado en este caso es:
307 -|- johannes -|- 5
307 -|- randomding -|- 31
307 -|- watdoetjho -|- 43
Escribí esta pequeña función para devolver las funciones en un archivo.
https://gist.github.com/tonylegrone/8742453
devuelve una simple matriz de todos los nombres de las funciones.Si llama en el archivo particular que desea escanear, sólo puede utilizar el siguiente:
$functions = get_functions_in_file(__FILE__);
Si no está preocupado por la captura de algunos comentadas, esta podría ser la forma más sencilla :
preg_match_all('/function (\w+)/', file_get_contents(__FILE__), $m);
var_dump($m[1]);
he resuelto este problema con array_diff
$funcs = get_defined_functions()["user"];
require_once 'myFileWithNewFunctions.php'; // define function testFunc() {} here
var_dump(array_values(array_diff(get_defined_functions()["user"], $funcs)))
// output: array[ 0 => "test_func"]
actualización
Para obtener el nombre de funciones "reales" Prueba este
foreach($funcsDiff AS $newFunc) {
$func = new \ReflectionFunction($newFunc);
echo $func->getName(); // testFunc
}
- 1. ¿Listado de funciones php en la parte superior del archivo? (o, ¿cómo saltar rápidamente a las funciones php?)
- 2. NetBeans no muestra la lista de funciones definida en el archivo php actualmente abierto
- 3. Lista de contenido del directorio (php)
- 4. Llamar a funciones de Drupal en un archivo PHP externo
- 5. Lista de funciones de OpenCV
- 6. Lista de funciones de agregación
- 7. Funciones del conjunto hash y lista de arreglos
- 8. Lista de funciones C obsoletas?
- 9. Funciones PHP recursivas anónimas
- 10. funciones PHP y @functions
- 11. Funciones sincronizadas en PHP
- 12. Redefinir funciones PHP integradas
- 13. ¡La composición de las funciones en una lista de funciones!
- 14. PHP: nombres de funciones ambiguas
- 15. Constante de PHP dentro del archivo JS
- 16. Eclipse PDT Intellisense para funciones de PHP
- 17. Constructores PHP y funciones estáticas
- 18. Sphinx: lista de funciones en un módulo
- 19. lista de funciones de apagado registradas
- 20. VBA lista de argumentos de funciones seleccionar
- 21. Prácticas recomendadas de funciones de espacio PHP
- 22. orden de funciones en el archivo cpp
- 23. PHP: Leer línea específica del archivo
- 24. PHP include(): Tamaño y rendimiento del archivo
- 25. PHP - Eliminar el último carácter del archivo
- 26. Destacando js-code dentro del archivo php
- 27. Desinfectar la ruta del archivo en PHP
- 28. PHP: Mover archivo del dominio al subdominio
- 29. Lectura del archivo .csv en php
- 30. PHP obtener dimensiones del archivo SWF
get_defined_functions() obtiene todas mis funciones declaradas de todos los archivos, no desde un archivo exacly! – zumrasha
actualizado. es posible que desee utilizar 'token_get_all()'. Si usa includes y requires, las funciones definidas en los otros archivos también se definirán en este archivo. – mauris