Логические операторы php true или false - PullRequest
3 голосов
/ 07 января 2012

Как php neewbie, я стараюсь читать много кода других людей, чтобы учиться.Сегодня я натолкнулся на такую ​​строку:

if ( stripos($post_to_check->post_content, '[' . $shortcode) !== false )

Мне было интересно, в чем разница между !==false и ==true Если кто-то может мне это объяснить, это было бы очень признательно.... а если нет реальной разницы - какие будут причины использовать цитируемую одну над другой ??

Ответы [ 4 ]

6 голосов
/ 07 января 2012

PHP является свободно типизированным языком.== соответствует обоим значениям, а === соответствует значениям и типу данных значений.

if (8 == '8') // returns true

Приведенные выше условия просто соответствуют значениям, а не типу данных, следовательно, if оценивается как TRUE

if (8 === '8') // returns false

и этот проверяет как значение, так и тип данных значений, поэтому if оценивается как FALSE

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

В вашем случае

stripos возвращает позицию подстроки в строке, если строка не найдена, она возвращает FALSE.

if ( stripos($post_to_check->post_content, '[' . $shortcode) !== false )

Приведенный выше код проверяет подстроку внутри строки и возвращает значение TRUE только при обнаружении подстроки.Если вы измените его на

if ( stripos($post_to_check->post_content, '[' . $shortcode) != false )

и когда подстрока, найденная в позиции 0, if оценивается как ЛОЖЬ, даже если подстрока есть в основной строке.Тогда условие станет следующим:

if ( 0 != false )

, и это оценивается как FALSE, потому что 0 рассматривается как FALSE

Так что вы должны использовать там !==

if ( 0 !== false )

При этом будут сравниваться значения и тип данных обоих значений. Значение 0 - это целочисленный тип, а false - это boolean, следовательно, тип данных здесь не совпадает и условиебудет TRUE

Страница руководства PHP гласит, что оператор сравнения , вы должны проверить это один раз.

3 голосов
/ 07 января 2012

Разница между !==false и ==true - это разница между идентичным / неидентичным и равным / неравным сравнением в PHP.

Пожалуйста, смотрите Операторы сравнения в руководстве по PHP, в чем разница между Одинаковым и Равным .

1 голос
/ 07 января 2012

!== - это сравнение, которое сравнивает не только значение , но также тип обеих переменных.

Это используется здесь, потому что stripos может возвращать false, если попадание не было найдено, но также 0, когда попадание было найдено в первом символе строки.

== не может различить эти два случая (они оба "ложные"), поэтому вы должны использовать === при работе с stripos.В руководстве есть предупреждение :

. Эта функция может возвращать логическое значение FALSE, но также может возвращать не-логическое значение, которое оценивается как FALSE, например 0 или "".Пожалуйста, прочитайте раздел о логических значениях для получения дополнительной информации.Используйте оператор === для проверки возвращаемого значения этой функции.

0 голосов
/ 07 января 2012

Примечание: == true и === true отличаются.

Я думаю! == false похоже на === true, поэтому объясните только == true и === true. Для первого == оно равно значению, поэтому 1 == true, 0 == false. для === он «идентичен» в PHP, а именно равен по значению, а также по типу.

таким образом, если результат находится на 0-й позиции, результат должен быть истинным; однако, если использовать == true, он не будет работать как 0! = true.

Например, стрипос («овца», «а») если вы используете == true, результат будет неправильным, поскольку он на первом месте.

...