2010-04-22 15 views
31

En PHP Considere esta función:conseguir nombres de los argumentos de la función

function test($name, $age) {} 

necesito para extraer alguna manera los nombres de los parámetros (para la generación de documentación personalizados de forma automática) para que yo pudiera hacer algo como:

get_func_argNames('test'); 

y devolvería:

Array['name','age'] 

¿Esto es posible en PHP?

+0

¿Hay alguna razón por la que no es justo con PHPDoc para generar la documentación que de forma automática? – Narcissus

Respuesta

57

Puede utilizar :

function get_func_argNames($funcName) { 
    $f = new ReflectionFunction($funcName); 
    $result = array(); 
    foreach ($f->getParameters() as $param) { 
     $result[] = $param->name; 
    } 
    return $result; 
} 

print_r(get_func_argNames('get_func_argNames')); 


//output 
Array 
(
    [0] => funcName 
) 
+0

Muchas gracias. ¿Y si quiero usar esto para obtener los argumentos del Método de clase? – Gotys

+2

@Gotys http://de3.php.net/manual/en/class.reflectionmethod.php – Gordon

+4

Puede usar ReflectionMethod, p. Ej. 'new ReflectionMethod ('classname', 'methodname');' El resto debe ser el mismo. –

3

Esta es una vieja pregunta que pasó en la búsqueda de algo que no sea la reflexión, pero voy a echar un vistazo a mi aplicación actual para que pueda ayudar a alguien más. Usando array_map

Para un método

$ReflectionMethod = new \ReflectionMethod($class, $method); 

    $params = $ReflectionMethod->getParameters(); 

    $paramNames = array_map(function($item){ 
     return $item->getName(); 
    }, $params); 

Para una función

$ReflectionFunction = new \ReflectionFunction('preg_replace'); 
    $params = $ReflectionFunction->getParameters(); 
    $paramNames = array_map(function($item){ 
     return $item->getName(); 
    }, $params); 
    echo '<pre>'; 
    var_export($paramNames); 

salidas

array(
    '0' => 'regex', 
    '1' => 'replace', 
    '2' => 'subject', 
    '3' => 'limit', 
    '4' => 'count' 
) 

Cheers,

4

Además de la respuesta de Tom Haigh si es necesario obtener la defa valor ult de atributos opcionales:

function function_get_names($funcName){ 

    $attribute_names = []; 

    if(function_exists($funcName)){ 

     $fx = new ReflectionFunction($funcName); 

     foreach ($fx->getParameters() as $param){ 

      $attribute_names[$param->name] = NULL; 

      if ($param->isOptional()){ 

       $attribute_names[$param->name] = $param->getDefaultValue(); 
      } 
     }   
    } 

    return $attribute_names; 
} 

Útil para la validación de tipo de variable.

2

func_get_args

function my($aaa, $bbb){ 
    var_dump( func_get_args()); 
} 


my("something","something"); //result: array('aaa' => 'something', 'bbb' => 'something'); 

También, existe otro funciones globales: get_defined_vars(), que no devuelve sólo la función, pero todas las variables.

+1

Debe aceptarse respuesta – Sojtin

+1

Creo que la razón por la que no es porque el comentario de 'resultado' es incorrecto. 'get_defined_vars()' generará: 'array ('aaa' => 'algo', 'bbb' => 'algo');'. Además, tenga en cuenta que esa función le dará * todas * variables definidas antes de su llamada, no solo parámetros de función. – Claymore

+0

@Claymore gracias, respuesta actualizada ... –

0

@ Tom Haigh, o lo hacen más elegante:

function getArguments($funcName) { 
    return array_map(function($parameter) { return $parameter->name; }, 
     (new ReflectionFunction($funcName))->getParameters()); 
} 

// var_dump(getArguments('getArguments')); 
Cuestiones relacionadas