Intereting Posts
Yii2: Как получить доступ к параметрам в шаблоне? Что случилось с PDO в другом классе? codeigniter проблема с регистром Zend Framework 2 – Формы аннотаций и Doctrine2 – Обрезаемая фатальная ошибка – ObjectManager PHP ColdFusion9 AES Encryption – Различные результаты Найти подстроки в строке, где подстрока, инкапсулированная определенным символом Является ли POST-действие безопасным доменом всегда безопасным Проблемы Magento Paypal с базовой валютой INR Могу ли я зашифровать PHP-источник или скомпилировать его, чтобы другие его не видели? и как? Поиск рекурсивного массива php – возврат определенного родителя Отобразить последнее изображение в каталоге, заканчивающемся на Неустранимая ошибка: нельзя использовать смещение строки в виде массива Разбиение массива на группы на основе значений Показывать только повторяющиеся элементы из массива Не удается отправить письма с xampp localhost

Доступ к неопределенным аргументам

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

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. } } 

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