почему strpos это! == ложь не правда? - PullRequest
0 голосов
/ 27 сентября 2018

Рассмотрим следующий пример:

$a='This is a test';

Если я сейчас это сделаю:

if(strpos($a,'is a') !== false) {
    echo 'True';
}

Получится:

True

Однако, если я использую

if(strpos($a,'is a') === true) {
    echo 'True';
}

Я ничего не понимаю.Почему !==false не ===true в этом контексте я проверил документы PHP на strpos(), но не нашел объяснения этому.

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Функция strpos возвращает целочисленное значение в случае успеха и false, только если стрелка не была найдена в строке.В нашем случае строка «Это тест» содержит «является».Таким образом, тест (position)! == false [где position - это первое вхождение 'is a'] отличается от false как по типу, так и по значению и вернет true.

0 голосов
/ 27 сентября 2018

Поскольку strpos() никогда не возвращает истину :

Возвращает положение, в котором находится игла, относительно начала строки стога сена (независимо от смещения).Также обратите внимание, что позиции строки начинаются с 0, а не с 1.

Возвращает FALSE, если игла не была найдена.

Возвращает логическое значение, только если игла не найдена.В противном случае он вернет целое число, , включая -1 и 0 , с позицией вхождения иглы.

Если вы сделали:

if(strpos($a,'is a') == true) {
    echo 'True';
}

Вы обычно получит ожидаемые результаты, так как любое положительное целое число считается истинным значением, и потому что при использовании оператора == жонглирование типов будет иметь значение true. Но , если строка была в начале строки, она равнялась бы false из-за возврата нуля, который является значением Falsey.

...