Подтвердить что ты не робот

Функции PHP - максимальное количество аргументов

В PHP при определении функции максимальное количество аргументов, которые вы можете создать? Это не то, что я делаю, просто вопрос, который возник при обсуждении его с коллегой:)

Будет ли это чисто ограничение памяти? эффективно без ограничений?

4b9b3361

Ответ 1

Аргументы функции помещаются в стек, после чего вызывается функция, которая, в свою очередь, считывает стек и использует эти значения в качестве параметров.

Итак, пока стек не заполнен, вы можете продолжать добавлять параметры, но это будет зависеть от ситуации, а во время разработки вы не будете знать размер стека.

Но я действительно надеюсь, что это чисто техническая дискуссия, и вам это не нужно IRL.; -)

Ответ 2

Нет предела. И вы всегда можете использовать func_get_args(), func_get_arg() и func_num_args(), чтобы избежать записи всех аргументов в определении функции.

Ответ 3

при определении функции, каково максимальное количество аргументов, которые вы можете создать?

Я не знаю конкретного предела в количестве аргументов как фиксированное число. Быстрый тест показал, что у меня не было проблем с определением функции с 255 555 аргументами. Для определения функции и ее выполнения требуется некоторое время. Однако он работает.

Когда число было поднято, я столкнулся с ограничением памяти, которое может быть строковым ограничением. Возможно, вы захотите улучшить тестовый сценарий, использовать буфер и сохранить файл на диск последовательно и включить его:

$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));

Ответ 4

Я не знаю, каковы ограничения, но в любом случае, если вы создадите функцию со слишком большим количеством аргументов, ваш код будет не так легко читать. Если вы хотите добавить много аргументов функции, вы можете сделать что-то вроде этого:

$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;
}