В чем разница между этими PHP-выражениями if? - PullRequest
7 голосов
/ 21 апреля 2010

В чем разница между этими PHP, если выражения!?

if ($var !== false)
{
    // Do something!
}


if (false !== $var)
{
    // Do something!
}

Некоторые фреймворки, такие как Zend Framework, используют самую последнюю форму, тогда как традиционная - первая.

Заранее спасибо

Ответы [ 6 ]

10 голосов
/ 21 апреля 2010

Результат выражения тот же, но это хороший способ защитить себя от присваивания вместо сравнения (например, запись if ($var = false) вместо if ($var == false), поскольку вы не можете присвоить значение $var для false ключевое слово)

2 голосов
/ 21 апреля 2010

Это действительно предпочтение.Вы можете указать это в любом случае, a == b или b == a, но проще ошибиться, если вы сделаете

if ($var == false)

, потому что если вы случайно наберете его с одной = буквой, условие будетвсегда равно true (потому что $ var будет установлен успешно), но в случае

if (false == $var)

, если вы сейчас введете =, вы получите ошибку.

1 голос
/ 21 апреля 2010

Два выражения семантически идентичны. Это просто вопрос предпочтения, ставить ли константное выражение первым или последним.

0 голосов
/ 21 апреля 2010

Рассмотрим этот сценарий:

if (strpos($string, $substring)) { /* found it! */ } 

Если $substring найден в начале $string, возвращаемое значение равно 0. К сожалению, внутри if это значение равно false, поэтому условие не выполняется.

Правильный способ справиться с этим будет:

if (false !== strpos($string, $substring)) { /* found it! */ }

Вывод:

false всегда гарантированно ложно. Другие значения могут не гарантировать это. Например, в PHP 3 empty('0') было true, но позже оно изменилось на false.

0 голосов
/ 21 апреля 2010

Разницы нет. !== сравнивает 2 выражения с проверкой типа и возвращает true, если они не равны. Разница может быть в порядке вычисления выражений, но в случае, который вы написали, разницы нет (и хорошая программа не должна полагаться на порядок выполнения таких выражений).

0 голосов
/ 21 апреля 2010

Нет реальной разницы. Операнды просто по разные стороны, но сравнение, тем не менее, одинаково.

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