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 гласит, что оператор сравнения , вы должны проверить это один раз.