Передача 0 в функцию со значением по умолчанию - PullRequest
3 голосов
/ 05 марта 2012

Я сейчас тестирую простую функцию PHP.

Я хочу вернуть текущее значение поля, если функция вызывается без какого-либо переданного параметра, или установить новое значение, если передан параметр. Странная вещь: если я передаю 0 (var_dump показывает правильное значение int (1) 0), функция переходит в ветку if, как я вызывал функцию без какого-либо значения, и я просто не понимаю, почему.

функция:

public function u_strasse($u_strasse = 'asdjfklhqwef'){
  if($u_strasse == 'asdjfklhqwef'){
    return $this->u_strasse;
  } else {
    // set new value here
  }
}

либо u_strasse(), либо u_strasse(0) возвращает меня в ветку if.

Ответы [ 4 ]

4 голосов
/ 05 марта 2012

Вы должны использовать ноль в качестве значения по умолчанию:

public function u_strasse($u_strasse = null)
{
    if ($u_strasse === null) { $u_strasse = 'asdjfklhqwef'; }

    // rest of function
}
1 голос
/ 05 марта 2012

При сравнении переменных разных типов (в частности, строк и чисел) оба значения будут преобразованы в число.Следовательно, ваш asdjfklhqwef конвертируется в 0 (число), сравнение истинно.

http://www.php.net/manual/en/language.operators.comparison.php

1 голос
/ 05 марта 2012

Используйте === вместо ==:

public function u_strasse($u_strasse = 'asdjfklhqwef'){
  if($u_strasse === 'asdjfklhqwef'){
    return $this->u_strasse;
  } else {
    // set new value here
  }
}

В случае == php пытается преобразовать 'asdjfklhqwef' в число (потому что вы передаёте $ u_strasse в качестве числа) и (int) 'asdjfklhqwef' равно 0. Чтобы избежать этого поведения, вам нужно строго сравнить (=== )

Подробнее о разнице в == и === здесь

0 голосов
/ 05 марта 2012

Передайте '0' вместо 0. Первый будет строкой.Вы можете разыграть это так:

$myvar = 0;

u_strasse((string)$myvar);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...