2011-11-08 30 views
13

En PHP, al definir una función, ¿cuál es la cantidad máxima de argumentos que puede crear? Esto no es algo que estoy haciendo, solo una pregunta que surgió al discutirlo con un colega :)Funciones de PHP: número máximo de argumentos

¿Esto sería puramente una limitación de memoria? efectivamente ilimitado?

+2

¿Por qué no hacer la prueba? http://stackoverflow.com/questions/8049673/php-functions-maximum-number-of-arguments/8049856#8049856 – hakre

+0

Estoy muy agradecido de que no lo haya hecho, pero le pedí que lo hiciera. Ya ves, de esta manera no todos tenemos que hacerlo, tampoco. SO acaba de servir a la comunidad maravillosamente de nuevo. –

Respuesta

9

Los argumentos de una función se insertan en una pila, después de lo cual se llama a la función que a su vez lee la pila y usa esos valores como parámetros.

De modo que mientras la pila no esté llena, puede seguir agregando parámetros, pero dependerá de la situación, y en el momento del diseño no sabrá el tamaño de la pila.

Pero realmente espero que esto sea puramente una discusión técnica y no lo necesite IRL. ;-)

+0

jaja, no no, como mencioné, esto no es IRL: divagaciones puramente técnicas :-) – bagwaa

11

No hay límite. Y siempre puede usar func_get_args(), func_get_arg() y func_num_args() para evitar escribir todos los argumentos en la definición de la función.

3

Realmente no sé cuáles son los límites, pero de cualquier forma, si creas una función con demasiados argumentos, tu código no será tan fácil de leer. En caso de que como añadir muchos argumentos de la función que puede hacer algo por el estilo:

$option = array(
    'arg_1' => 'value', 
    'arg_2' => 'value', 
    .... 
    'arg_x' => 'value' 
); 

function function_name($args = "") 
{ 
    $defaults = array(
     'arg_1' => 'default_value', 
     'arg_2' => 'default_value' 
     .... 
     'arg_x' => 'default_value' 
    ); 

    $arguments = array_merge($defaults, (array)$args); 
    extract($arguments); 

    echo $arg_1; 
    echo $arg_x; 
} 
4

cuando se define una función de cuál es el número máximo de argumentos que se pueden crear?

No conozco el límite específico en el número de argumentos como un número fijo. Una prueba rápida reveló que no tenía problemas para definir una función con 255 555 argumentos. Lleva tiempo definir la función y ejecutarla. Sin embargo, funciona.

Cuando se aumentó el número, me encontré con un límite de memoria que podría ser un límite de cadena. Es posible que desee mejorar el caso de prueba, utilizar un búfer y guardar el archivo en el disco secuencialmente e incluirlo a continuación:

$count = 255555; 

$code = 'function test(%s) {return 1;}; return test();'; 

$params = ltrim(implode('=0, $p', range(0, $count)), '0, =').'=0'; 

echo eval(sprintf($code, $params)); 
Cuestiones relacionadas