Объяснение очень странного возврата PHP-функции - PullRequest
0 голосов
/ 05 декабря 2011

Так что моему коду в прошлом требовалась переменная для запуска через 2 функции, а затем для возврата значения как такового.

 function 1($variable) {
    check($variable);
    return $variable // either a -1, -2 or true;
 }

 // pass the return to next function

function 2($variable) {
    check($variable);
    return $variable // either a -1, -2 or true;
}

При следующей проверке возвращается сообщение пользователю как таковое:

  if($variable == -1) // display message
  if($variable == -2) // display message
  if($variable == true) // display message

Теперь, согласно требованию работы, переменная должна пройти 3-ю проверку функции, по-прежнему возвращая -1, -2 или true, а затем перейти к последним операторам if для отображения.Теперь это где это становится странным.Если я держу его в 2 функциях, операторы if работают, однако, если я запускаю его через 3-ю функцию проверки, мне нужно отформатировать мое if, как это, чтобы правильно проверить возвращаемое значение:

if($variable === -1) // display message
if($variable === -2) // display message
if($variable === true) // display message

Обратите внимание, у меня естьдобавить третий символ '='.Я просто не могу понять, почему это происходит.Это нормально по некоему закону PHP, о котором я не знаю, или это ошибка?

Ответы [ 3 ]

1 голос
/ 05 декабря 2011

Это не странное поведение, это очень естественно для PHP.

Следующее выражение:

if ($variable == true) {
}

означает, что PHP преобразует левый операнд в менее претенциозный тип (в данном случае BOOLEAN) и выполняет сравнение после этого.Что, очевидно, приведет к TRUE, если значение переменной $ не равно 0 или FALSE, или NULL, или ''

. Во втором случае, т. Е. ===, существует строгое значение проверки и сравниваются типы обоих операндов.

1 голос
/ 05 декабря 2011

Знак тройного равенства (===) возвращает true, только если сравниваемые два объекта идентичны (одинакового типа и значения), а не просто равны.

Например:

$a = 1;
$b = "1";

echo $a == $b;  // True
echo $a === $b; // False
0 голосов
/ 05 декабря 2011

Ваш код не показывает, как вы вызываете функции и сохраняете возвраты, может быть проблема. Кроме того, я полагаю, что вы вызвали функцию 1 и 2 только для иллюстрации, потому что, как вы знаете, вы не можете начать имя функции с номера.

=== равно 'равно' (значение и тип). Часто используется для логических тестов, потому что иногда необходимо отличать 0 от ложного и 1 от истинного.

...