Использование значения по умолчанию при вызове функции - PullRequest
14 голосов
/ 25 октября 2009

В 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');

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

Ответы [ 5 ]

25 голосов
/ 25 октября 2009

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

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'));
10 голосов
/ 25 октября 2009

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

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

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

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

2 голосов
/ 25 октября 2009

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

1 голос
/ 25 октября 2009

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

<?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'];
}
?>
0 голосов
/ 05 февраля 2015

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

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");
...