2017-02-10 8 views
0
function foo($x="", $y="", $z=""){ 
    echo $x .'-'. $y .'-'. $z; 
} 
foo('hello', $z='world'); 
> hello-world- 

Я хотел бы напечатать 'hello - world'. Нужно ли мне указывать все аргументы между x и z для этого?Как передать неотправляемые параметры функции?

+0

Только самые правые параметры функции могут быть опущены. Альтернативой было бы изменение функции для принятия массива. –

+0

Да, вы должны – steven

+0

Мне кажется, что это была бы хорошая функция для поддержки :( – user2651804

ответ

0

Я также предлагаю вам еще один псевдоним:

function foo($x="", $y="", $z=""){ 
    return $x .'-'. $y .'-'. $z; 
} 

function fooXZ($x="", $z=""){ 
    return foo($x, "", $z); 
} 

echo fooXZ('hello', 'world'); 

> hello-world- 

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

+1

Это было бы намного лучше, если бы методы могли иметь одно и то же имя, как в Java. – user2651804

+0

Я люблю php. Я ненавижу невозможность сделать это в php = ( – sensorario

0

Да, вы должны указать все параметры (аргументы) в своей функции (кроме последней!), Если она написана, как в вашем примере.

Один из альтернатив - вместо этого передать массив как параметр, но это не сработает, если метод/функция вызывается из URL-адреса.

Вы не можете указать, какой параметр, чтобы передать, когда вы делаете вызов, как в вашем примере:

foo('hello', $z='world'); 

Вы только передавая второй параметр в вашем примере.

Вы должны сделать одно из следующих вызовов функции:

foo('hello', 'world'); 
foo('hello', '', 'world'); 
Смежные вопросы