пропустить параметр функции? - PullRequest
0 голосов
/ 22 марта 2011

У меня есть эта проблема, но я не знаю, как ее назвать, например, у меня есть эта функция,

function test($param1,$param2 = false,$param3 = false)
{

    if($param2 == true)
    {
        return '2';
    }

    elseif($param3 == true)
    {
        return '3';
    }

    else 
    {
        return '1';
    }
}

Чтобы вернуть '3', я должен вызвать свою функцию следующим образом:

$test = test('test',false,true);

Я хочу спросить, могу ли я пропустить второй параметр и вернуть '3', вызвав функцию, подобную этой?

$test = test('test',$param3 = true);

Или любой другой способ сделать это?

Ответы [ 5 ]

4 голосов
/ 22 марта 2011

Вы можете подделать именованные параметры, как показано здесь на SO:

Эмуляция параметров именованных функций в PHP, хорошая или плохая идея?

Вот пример правильного ответа, который вы должны искать на этой странице:

function myFunc (array $args) {
    $default = array(
        "name" => "John Doe",
        "age" => "30"
    );
    // overwrite all the defaults with the arguments
    $args = array_merge($defaults, $args);
    // you *could* extract($args) here if you want

    echo "Name: " . $args['name'] . ", Age: " . $args['age'];
}

myFunc(array("age" => 25)); // "Name: John Doe, Age: 25"
1 голос
/ 22 марта 2011

Вы можете передать параметры в массиве:

$params = array(
    'param1' => 'test',
    'param3' => true
);

$result = myFunction($params);

function myFunction($params) {
    if (isset($params['param3']) && $params['param3']) {
        return 3;
    }
}
0 голосов
/ 22 марта 2011

Я хочу спросить, могу ли я пропустить второй параметр и вернуть '3', вызвав функцию, подобную этой?

Нет, вы не можете. Единственный способ «пропустить» параметр - отправить что-то вроде NULL. Но тогда ваша функция должна выглядеть так:

function foo($a, $skip_me = NULL, $b = 1);
{
  if ($skip_me === NULL) $skip_me = false; // set the default value like this
}

foo(1, NULL, 2);

Другой вариант - отправить массив и заставить функцию принимать один параметр. Это может быть полезно, если у вас много необязательных аргументов.

0 голосов
/ 22 марта 2011

Нет, нет способа сделать это.Если вы хотите передать $ param3 в функцию, вам нужно будет передать все параметры, предшествующие $ param3 в сигнатуре функции.

0 голосов
/ 22 марта 2011

Вы можете установить значения по умолчанию для ваших параметров следующим образом:

function someFunction( $varA, $varB=false, $varC=false)
{
    if($varB==true)
    {
      return 'b';
    }
}

Когда вы вызываете функцию, вы можете сделать someFunction(true), someFunction(true, true) или someFunction(true, true, true). Единственная загвоздка в том, что вы не можете объявить A и C, не объявив также B.

Edit: Пропустил первую строчку. Вы также можете передать свои переменные в виде массива.

...