Можно ли передать переменные, такие как myfunction ($ var1 = "hi") в php? - PullRequest
2 голосов
/ 04 февраля 2011

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

function myfunction($var1="bar", $var2="foo"){
echo $var1 . $var2; 
}

myfunction($var2="bar");

и получить следующий вывод: barbar?

С уважением, Кристоффер

Ответы [ 2 ]

8 голосов
/ 04 февраля 2011

Нет, именованные параметры не поддерживаются в PHP.

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

function myfunction($args = array()) {
    $defaults = array('var1' => 'bar', 'var2' => 'foo');
    extract(array_merge($defaults, $args));
    echo $var1 . $var2; 
}

myfunction(array('var2' => 'bar'));
0 голосов
/ 04 февраля 2011

Именованные параметры еще не в PHP. Есть несколько обходных путей для достижения этой цели. JSON или передача массива - один. Но некоторые встроенные функции PHP используют этот метод для значений по умолчанию spurios:

function yourfunction($var1=NULL, $var2=NULL) {
     $var1 or $var1 = "bar";
     $var2 or $var2 = "foo";
     $var3 or $var3 = "jip";

     echo $var1 . $var2;
}

Где синтаксис вызова будет:

yourfunction(null, "baz");

Так что это семантически больше основано на индексированных параметрах, а не на именованных. И хитрость заключается в том, что в коде инициализации функции игнорируются значения по умолчанию (очень похоже на проверку типов и т. Д.)

Более дурацкий параметр (используется только со скалярами) - это параметры json или url:

yourfunction("var2=bar;var3=xyz");
yourfunction('{"var2":"bar"}');    // very debatable
...