В PHP при определении функции максимальное количество аргументов, которые вы можете создать? Это не то, что я делаю, просто вопрос, который возник при обсуждении его с коллегой:)
Будет ли это чисто ограничение памяти? эффективно без ограничений?
В PHP при определении функции максимальное количество аргументов, которые вы можете создать? Это не то, что я делаю, просто вопрос, который возник при обсуждении его с коллегой:)
Будет ли это чисто ограничение памяти? эффективно без ограничений?
Аргументы функции помещаются в стек, после чего вызывается функция, которая, в свою очередь, считывает стек и использует эти значения в качестве параметров.
Итак, пока стек не заполнен, вы можете продолжать добавлять параметры, но это будет зависеть от ситуации, а во время разработки вы не будете знать размер стека.
Но я действительно надеюсь, что это чисто техническая дискуссия, и вам это не нужно IRL.; -)
Нет предела. И вы всегда можете использовать func_get_args()
, func_get_arg()
и func_num_args()
, чтобы избежать записи всех аргументов в определении функции.
при определении функции, каково максимальное количество аргументов, которые вы можете создать?
Я не знаю конкретного предела в количестве аргументов как фиксированное число. Быстрый тест показал, что у меня не было проблем с определением функции с 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));
Я не знаю, каковы ограничения, но в любом случае, если вы создадите функцию со слишком большим количеством аргументов, ваш код будет не так легко читать. Если вы хотите добавить много аргументов функции, вы можете сделать что-то вроде этого:
$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;
}