Php 5 strpos() разница между возвратом 0 и ложным?
if(strpos("http://www.example.com","http://www.")==0){ // do work}
Я ожидаю, что это решит как истинный, что и делает. Но что происходит, когда я делаю
if(strpos("abcdefghijklmnop","http://www.")==0){// do work}
Это также передается на php 5, потому что, насколько я могу выработать, strpos возвращает false, который преобразуется как 0.
Это правильное мышление/поведение? Если да, то каков обходной путь для тестирования на то, что подстрока находится в начале другой строки?
Ответы
Ответ 1
Да, это правильное/ожидаемое поведение:
-
strpos
может возвращать 0
, когда есть совпадение в начале строки
- и он вернет
false
, когда совпадение не будет
Дело в том, что вы не должны использовать ==
для сравнения 0
и false
; вы должны использовать ===
, например:
if(strpos("abcdefghijklmnop","http://www.") === 0) {
}
Или:
if(strpos("abcdefghijklmnop","http://www.") === false) {
}
Для получения дополнительной информации см. Операторы сравнения:
-
$a == $b
будет TRUE
, если $a
равно $b
.
-
$a === $b
будет TRUE
, если $a
равно $b
, а они одного типа.
И, цитируя страницу руководства strpos
:
Эта функция может возвращать Boolean false
, но также может возвращать небулевое значение, которое false
, например 0
или ""
.
Пожалуйста, прочитайте раздел Booleans для больше информации.
Используйте ===
оператора для проверки возврата значение этой функции.
Ответ 2
===
и !==
сравнить тип и значение:
if (strpos("abcdefghijklmnop", "http://www.") !== false){// do work}
Ответ 3
strpos возвращает int или boolean false. оператор == также оценивает значение 0 в значении false, вы хотите использовать оператор === (три знака равенства), который также проверяет, что сравниваемые типы одинаковы, а не просто видят, могут ли они быть оценены так, чтобы они были одинаковыми.
так
if (strpos($hastack, $needle) === 0)
{
// the $needle is found at position 0 in the $haystack
}
Ответ 4
0
- возможное возвращаемое значение из strpos
, когда оно находит совпадение в самом начале. Если совпадение не найдено, оно возвращает false
(boolean). Поэтому вам нужно проверить возвращаемое значение strpos
с помощью оператора ===
, который проверяет значение и тип, а не использует ==
, который просто проверяет значение.
Ответ 5
Я лично предпочитаю использовать этот способ:
if(!strpos($v,'ttp:'))$v='http://'.$v;
или
if(strpos(' '.$v,'http'))
чтобы избежать положения "0
", всегда делайте его числом больше 0
приветствия