Использование значения по умолчанию при вызове функции

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

function test($t1 ='test1',$t2 ='test2',$t3 ='test3') { echo "$t1, $t2, $t3"; } 

И вы можете просто использовать функцию, подобную этой

 test(); 

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

 test('test1','test2','hi i am different'); 

Я попробовал это:

 test(,,'hi i am different'); test(default,default,'hi i am different'); 

Каков наилучший способ сделать что-то подобное?

Использовать массивы:

 function test($options = array()) { $defaults = array( 't1' => 'test1', 't2' => 'test2', 't3' => 'test3', ); $options = array_merge($defauts, $options); extract($options); echo "$t1, $t2, $t3"; } 

Вызовите свою функцию следующим образом:

 test(array('t3' => 'hi, i am different')); 

Вы не можете сделать это, используя raw PHP. Вы можете попробовать что-то вроде:

 function test($var1 = null, $var2 = null){ if($var1 == null) $var1 = 'default1'; if($var2 == null) $var2 = 'default2'; } 

а затем вызовите свою функцию с null как идентификатор переменной по умолчанию. Вы также можете использовать массив со значениями по умолчанию, которые будут проще с большим списком параметров.

Еще лучше попытаться избежать всего этого и немного переосмыслить свой дизайн.

Параметры, имеющие значения по умолчанию, должны быть последними, после того как остальные, в PHP и все остальные до этой точки должны быть заполнены при вызове функции. Я не знаю, так или иначе, чтобы передать значение, которое вызывает значение по умолчанию.

То, что я обычно делаю в этих ситуациях, – это указать параметры как массив. Взгляните на следующий пример (непроверенный):

 <?php test(array('t3' => 'something')); function test($options = array()) { $default_options = array('t1' => 'test1', 't2' => 'test2', 't3' => 'test3'); $options = array_merge($default_options, $options); echo $options['t1'] . ', ' . $options['t2'] . ', ' . $options['t3']; } ?> 

вы можете определить такую ​​функцию, как:

 function grafico($valores,$img_width=false,$img_height=false,$titulo="title"){ if ($img_width===false){$img_width=450;} if ($img_height===false){$img_height=300;} ... } 

и вызвать его без длительных параметров или заменить один или несколько на «false»:

 grafico($values); grafico($values,300); grafico($values,false,400); grafico($values,false,400,"titleeee");