Параметры функции по умолчанию

  • Автор темы Автор темы Bermuda
  • Дата начала Дата начала

Bermuda

Новичок
Параметры функции по умолчанию

<?
function foo($bar = "foo", $somevar) {
print $bar;
}

foo("bar", "somestring"); // выводит строку "bar"
foo(null, "somestring"); // ничего не выводит

?>

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

Правильное ли это поведение, что переменная $bar при передаче в функцию нулевого значения не принимает значение по умолчанию?

Как сделать так, чтобы при передаче нулевого значения переменная принимала значение по умолчанию?
Конструкция foo(, "somestring"); не прокатывает. Параметры местами менять нельзя.
 
Ты мануал внимательно читал? Понял, почему параметры, которые принимают значения по умолчанию, в конце ставить нужно? null - это тоже значение

-~{}~ 30.08.05 11:44:

Как сделать так, чтобы при передаче нулевого значения переменная принимала значение по умолчанию?
Конструкция foo(, "somestring"); не прокатывает. Параметры местами менять нельзя.
прелесть :) if (null == $bar) $bar = 'foo';
 
Автор оригинала: svetasmirnova
Ты мануал внимательно читал? Понял, почему параметры, которые принимают значения по умолчанию, в конце ставить нужно? null - это тоже значение
Да, перед тем как задать вопрос сделал поиск по форуму и внимательно прочитал мануал "Default argument values", однако вопроса это не решает. Привожу пример моего кода, думаю прояснит суть вопроса.


function getParam($name, $check, $escapar = true, $escaparhtml = true, $method = "BOTH") {


PHP:
//сама функция
function getParam($name, $check, $escapar = true, $escaparhtml = true, $method = "BOTH") {
//
//some code
//
}

//ее вызов
$nombre = getParam("nombre",  "STRING", null, null, "POST");

Теоретически функцию getParam я менять не могу, но если очень хочется :)

Да, и все же, это правильное поведение пользовательской функции?
 
Да, правильное. Передавай значение по умолчанию, если другого выхода нет.
 
null ничем не отличается от true false "PARAM" 100.29394 и т.д.
null это тоже значение => меняй функцию или передавай явно значения по умолчанию
 
Ок, тогда вот такой пример
PHP:
<?
function foo($bar = "foo") {
    print $bar; //ничего не выводит
}

foo($a);
?>
$a даже не определено. Странно как-то.
 
Автор оригинала: Andreika
foo ($a); здесь $a == ""
А почему это вдруг $a стало равно пустой строке?
Я не спорю, просто пытаюсь разобраться, потому как мне такое поведение кажется странным.
 
ок, не равно оно пустой строке... оно равно null

просто значка как-бы равно нету )

-~{}~ 30.08.05 19:59:

короче - прийми это как фактъ :)
foo(); - значение по умолчанию
foo(null); - null
 
Ок, пусть равно null, но ведь ему никто не присваивал значение null. Более того если
Автор оригинала: Andreika
null ничем не отличается от true false "PARAM" 100.29394 и т.д.
то когда мы сделаем так
$var = null;
то isset($var); должно вернуть true, однако isset() возвращает false, как и написано в документации. Очень нелогично.

Автор оригинала: Andreika
короче - прийми это как фактъ :)
foo(); - значение по умолчанию
foo(null); - null
Ок. Придется с этим смириться.

Вообще хотелось бы

foo() === foo(null);
 
Bermuda
отсутствие значения - тоже значение :)
функция isset() по сути и возвращает $param===null

>foo() === foo(null);
можно придумать пример где этого не надо )
 
>Ок, пусть равно null, но ведь ему никто не присваивал значение null.
Присвоил ему значение интерпретатор, ибо в пхп инициализировать переменные не обязательно.
 
В других языках было бы написано
PHP:
$nombre = getParam("nombre",  "STRING",,, "POST");
но, к сожалению в PHP такого пока нет. Может быть еще сделают? :)
 
На эту тему слышал лекцию. Знакомый парень писал программу для какой девушки и паралельно давал обьясняснения.
Точно не помню по постараюсь поточнее:
Переменная это такая вещь и чтобы тебе понять, поясню на пальцах. Представь себе сундук. На сундуке надпись, внутри него что-то лежит. Так вот наша переменная это и есть сундук.
Надпись на сундуке это название переменной. То что внутри сундука, это ее значение. Есть же в жизни пустые сундуки! Значит есть переменные с пустым значением.
Вот теперь смотри, я программа, ты будешь функция. Я тебе передаю сундук. Ты его берешь и смотришь что внутри. Если есть что-то, то ты можешь этим воспользоваться.
Нет значения то сама положи в него что-то, ну то что тебе нужно, а потом просто бери из сундука. Или говори мне, т.е. программе что пустые сундуки не принимаются.
Если тебе для работы нужен сундук с определенным названием, а я его тебе не дал, то собери этот сундук сама и положи в него то что тебе хочется.

Извинитте если не в тему.
 
Сверху