2015-07-17 4 views
-20

В процессе преобразования некоторого кода из Java в PHP, я наткнулся на следующий код Java:Переменный число параметров в PHP

void doSomething(String requiered, String... optionals) {...} 

Я знаю, что можно создать аналогичную функцию подписи с использованием func_get_args() и I знаю, что я мог бы также передать неизвестный счет params в массиве. Тем не менее, мне не кажется прямым, поэтому мне было интересно, может ли быть лучший способ иметь переменное количество аргументов в PHP.

+0

http://php.net/manual/en/functions.arguments.php#functions.variable-arg-list – CBroe

+5

@OfekRon - Не всегда, но вместо того, чтобы спрашивать «Как это сделать», возможно, вы начали со своего второго редактирования (минус, называя меня странным) и сказали нам, где искать альтернативы? (Возможно, это было бы лучше?). – Epodax

+0

@Epodax Я думал, что это слишком легко ответить на вопрос, чтобы переоценить себя, но я думаю, что я ошибся ... –

ответ

4

PHP 5.6 предлагает возможность иметь эту точную конструкцию. Из PHP инструкции:

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

<?php 
function sum($acc, ...$numbers) { 
    foreach ($numbers as $n) { 
     $acc += $n; 
    } 
    return $acc; 
} 

echo sum(1, 2, 3, 4); 
?> 

http://php.net/manual/en/functions.arguments.php#functions.variable-arg-list

+0

, но мне также нужно 1 arg, чтобы быть требовательным ... можно ли это сделать? –

+0

@OfekRon Да, у вас может быть подпись типа 'method (Тип $ required, Type $ required, ... $ optionals)' – Matiss

+1

@OfekRon, однако, имейте в виду, что это НОВАЯ конструкция, введенная в 5.6. Если вы хотите, чтобы ваш код был совместим со старыми версиями PHP, вы должны использовать func_get_args. – Matiss

Смежные вопросы