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

Bermuda

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

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

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

?>

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

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

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

svetasmirnova

маленький монстрик
Ты мануал внимательно читал? Понял, почему параметры, которые принимают значения по умолчанию, в конце ставить нужно? null - это тоже значение

-~{}~ 30.08.05 11:44:

Как сделать так, чтобы при передаче нулевого значения переменная принимала значение по умолчанию?
Конструкция foo(, "somestring"); не прокатывает. Параметры местами менять нельзя.
прелесть :) if (null == $bar) $bar = 'foo';
 

Bermuda

Новичок
Автор оригинала: 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 я менять не могу, но если очень хочется :)

Да, и все же, это правильное поведение пользовательской функции?
 

svetasmirnova

маленький монстрик
Да, правильное. Передавай значение по умолчанию, если другого выхода нет.
 

Andreika

"PHP for nubies" reader
null ничем не отличается от true false "PARAM" 100.29394 и т.д.
null это тоже значение => меняй функцию или передавай явно значения по умолчанию
 

Bermuda

Новичок
Ок, тогда вот такой пример
PHP:
<?
function foo($bar = "foo") {
    print $bar; //ничего не выводит
}

foo($a);
?>
$a даже не определено. Странно как-то.
 

Bermuda

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

Andreika

"PHP for nubies" reader
ок, не равно оно пустой строке... оно равно null

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

-~{}~ 30.08.05 19:59:

короче - прийми это как фактъ :)
foo(); - значение по умолчанию
foo(null); - null
 

Bermuda

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

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

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

foo() === foo(null);
 

Andreika

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

>foo() === foo(null);
можно придумать пример где этого не надо )
 

aciDroN

Новичок
>Ок, пусть равно null, но ведь ему никто не присваивал значение null.
Присвоил ему значение интерпретатор, ибо в пхп инициализировать переменные не обязательно.
 

ksnk

прохожий
В других языках было бы написано
PHP:
$nombre = getParam("nombre",  "STRING",,, "POST");
но, к сожалению в PHP такого пока нет. Может быть еще сделают? :)
 

Gremboloid

инженера Гр...
На эту тему слышал лекцию. Знакомый парень писал программу для какой девушки и паралельно давал обьясняснения.
Точно не помню по постараюсь поточнее:
Переменная это такая вещь и чтобы тебе понять, поясню на пальцах. Представь себе сундук. На сундуке надпись, внутри него что-то лежит. Так вот наша переменная это и есть сундук.
Надпись на сундуке это название переменной. То что внутри сундука, это ее значение. Есть же в жизни пустые сундуки! Значит есть переменные с пустым значением.
Вот теперь смотри, я программа, ты будешь функция. Я тебе передаю сундук. Ты его берешь и смотришь что внутри. Если есть что-то, то ты можешь этим воспользоваться.
Нет значения то сама положи в него что-то, ну то что тебе нужно, а потом просто бери из сундука. Или говори мне, т.е. программе что пустые сундуки не принимаются.
Если тебе для работы нужен сундук с определенным названием, а я его тебе не дал, то собери этот сундук сама и положи в него то что тебе хочется.

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