Есть ли способ передать неограниченное количество аргументов функции и получить доступ ко всем этим аргументам без необходимости определять их в заголовке. Вот пример, чтобы сделать его более понятным:
function doSomething($var1="", $var2="".........) { // Do something with the arguments }
Я не хочу, чтобы я определил кучу аргументов. Есть ли способ просто захватить все аргументы в массиве? Даже если они не были определены? (PHP BTW)
Конечный результат должен выглядеть примерно так:
func("hello", "ya", "hi", "blah", "test", "go"); function func() { //Loop Over Arguments }
Я видел, как некоторые собственные PHP-функции могут принимать бесконечное количество аргументов, но могут ли пользовательские функции делать то же самое?
Вы можете использовать func_get_args
, func_get_arg
и func_num_args
Учитывая, что вы указали эти три переменные:
$param_1 = "A"; $param_2 = "B"; $param_3 = "C";
Вот первый пример, используя func_get_args
для получения всех параметров в одном массиве:
my_function_1($param_1, $param_2, $param_3); function my_function_1() { $num_args = func_num_args(); if ($num_args >= 1) { $args = func_get_args(); var_dump($args); } }
И вот еще один, чтобы получить параметры один за другим, с func_get_arg
:
my_function_2($param_1, $param_2, $param_3); function my_function_2() { $num_args = func_num_args(); if ($num_args >= 1) { $args = func_get_args(); for ($i = 0 ; $i<$num_args ; $i++) { var_dump(func_get_arg($i)); } } }
См. Func_get_args . Он делает именно то, что вы хотите
Да, определенно есть. Проверьте func_get_args () , он должен делать именно то, что вам нужно.
Вы можете узнать, сколько аргументов вызывала функция с помощью func_num_args () . Затем вы можете получить каждый аргумент, указав его индекс, используя func_get_arg (index) или все аргументы в виде массива, используя func_get_args () .
Пример:
function variable_arguments() { echo "This function was called with ".func_num_args()." arguments.<br />"; echo "Those arguments were:<br /><pre>"; echo print_r(func_get_args()); echo "</pre>"; } variable_arguments("Hello", 42, array(true));
Как и другие, вы можете использовать func_get_args()
но почему бы не попытаться передать параметры в массиве? PHP свободно набирается, поэтому вы можете хранить что-нибудь в нем.
$params = array(1, 2, 'something'); doSomething($params); function doSomething($params) { foreach ($params as $value) { // do something. } }
Я предпочитаю это, потому что разработчик видит, что вы ожидаете параметров для функции, и вы по-прежнему можете передавать столько параметров, сколько хотите, с небольшими накладными расходами через массив параметров.