Это ошибка в PHP - PullRequest
       6

Это ошибка в PHP

2 голосов
/ 15 марта 2011
<?php

if(stripos('http://cp.uctorrent.com', 'cp.utorrent.com') >= 0){
    echo "Good1";
}else{
     echo "Bad1";
}

if(stripos('http://uctorrent.com', 'cp.utorrent.com') >= 0){
    echo "Good2";
}else{
    echo "Bad2";
}

?>

вывод

Good1Good2

, тогда как он должен быть

Good1Bad2

Ответы [ 8 ]

7 голосов
/ 15 марта 2011
<?php
  if(false >= 0) echo "Good";
  else echo "Bad";
  // this code prints Good
?>

Это не ошибка, это «странное» логическое преобразование.

stripos возвращает false, если строка не найдена, и false преобразуется в 0 в PHP.

Непосредственно из документации (проблема в другом):

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

2 голосов
/ 15 марта 2011

Чтение руководства очень поможет:

Внимание * * 1004

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

2 голосов
/ 15 марта 2011

В случае, если 2 stripos возвращает false в случае неудачного поиска, а false при сравнении с 0 возвращает true.

. Правильный способ сделать это - использовать оператор идентификации.который проверяет и тип и значение:

if(stripos('http://cp.uctorrent.com','cp.utorrent.com') !== false)
  echo "Good1";                                         ^^^^^^^^^^
else 
  echo "Bad1";
1 голос
/ 15 марта 2011

Опять попробуйте это и избегайте проблем, вызванных шаблонами использования функции микрооптимизации:

if (stristr('http://cp.uctorrent.com', 'cp.utorrent.com')) {
   echo "Good1";
}
else {
   echo "Bad1";
}
1 голос
/ 15 марта 2011

Если вы хотите проверить, не удалось ли стрипам получить совпадение, вам нужно проверить значение типа и с помощью! == или ===, например:

<?php

if(stripos('http://cp.uctorrent.com','cp.utorrent.com')!==false)echo "Good1";
else echo "Bad1";

if(stripos('http://uctorrent.com','cp.utorrent.com')!==false)echo "Good2";
else echo "Bad2";

?>
1 голос
/ 15 марта 2011

Если игла не найдена, stripos () вернет логическое значение FALSE.

http://php.net/manual/en/function.stripos.php

Логическое значение FALSE в PHP эквивалентно целому числу 0, равному >= 0.

0 голосов
/ 15 марта 2011
utorrent <---> uctorrent

я такой идиот ...

это была заклинательная ошибка ...

сравнение uctorrent с utorrent

извините всех

0 голосов
/ 15 марта 2011

Ниже $ p имеет значение 'false' (означает 0), поэтому оно> = 0

$p = stripos('http://uctorrent.com','cp.utorrent.com');

Вам необходимо проверить полоски ('http://uctorrent.com','cp.utorrent.com')! == false сначала, затем получите $ p (найдена позиция) как выше ...

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