2011-06-06 9 views
5

Ayudarme a encontrar todos los argumentos de la función "funcname" usando la función token_get_all() en el código fuente. Parece simple, pero hay muchas opciones especiales, como arreglos como parámetros o llamar a los métodos estáticos como parámetros. Tal vez hay una solución universal simple?PHP, Tokenizer, encuentre todos los argumentos de la función

UPD:

Necesito los argumentos de la función pasaron cuando se llama a ella. Haga que estén en un análisis externo del archivo. Por ejemplo, hay un archivo PHP:

<?php 
funcname('foo'); 
funcname(array('foo'), 'bar'); 

El analizador debe comenzar la siguiente manera:

$source = file_get_contents('source.php'); 
$tokens = token_get_all($source); 
... 

Como resultado, la necesidad de obtener una lista como esta:

[0] => array('foo'), 
[1] => array(array('foo'), 'bar') 
+1

Hola, Anton, tengo un problema similar para el análisis estático de las funciones de localización. ¿Alguna vez encontró una solución sólida para esto? – Gavin

Respuesta

5

En lugar de usar un tokenizador, usa la reflexión. En este caso, utilice ReflectionFunction:

function funcname ($foo, $bar) { 

} 

$f = new ReflectionFunction('funcname'); 
foreach ($f->getParameters() as $p) { 
    echo $p->getName(), "\n"; 
} 

Esto da salida a

foo 
bar 

También puede utilizar esta clase y clases relacionadas (tales como ReflectionParameter) para obtener más información acerca de una función y sus parámetros, tales como si un parámetro es opcional y cuál es su valor predeterminado.

+0

Gracias. Describí incorrectamente el problema y actualicé el tema. – Anton

Cuestiones relacionadas