strstr() непонятки с нулем

ys

отодвинутый новичок
strstr() непонятки с нулем

Вот упрощенный до предела test case:

1.
<?php
$str = '0';
$need = '0';
if(strstr($str, $need)) echo '+';
else echo '-';
?>

2.
<?php
$str = '1';
$need = '1';
if(strstr($str, $need)) echo '+';
else echo '-';
?>

Вопрос: почему в первом случае '-', а во втором '+' .


Просто наткнулся на вырожденный случай использования функции strstr() и наткнулся на такой эффект.

gettype() - говорит, что все переменные типа string.
php: 4.3.9 as module.
 

ys

отодвинутый новичок
В обоих случаях должно быть '+', т.е. TRUE, вот почему в первом случае FALSE?
 

Фанат

oncle terrible
Команда форума
ys
такой же "вырожденный" случай будет, если ты во втором примере будешь использовать Strpos.
 

tony2001

TeaM PHPClub
в первом случае тебе возвращается из strstr() - '0', во втором - '1'.
'0' интерпретируется как false
'1' - как true.

PHP:
//так будет работать всегда
if(strstr($str, $need) !== false)
 

ys

отодвинутый новичок
MeLLowD

Вы про функцию strstr(); читали?
Вы про типы переменных читали?
 

Фанат

oncle terrible
Команда форума
ВАУ!
оно нас учить решило!

а ты сам-то читало?
 

ys

отодвинутый новичок
tony2001

А понял, те if() интерпретирует, (string) '0' как (integer) 0
во блин, не знал. :)
 

MeLLowD

Guest
читал

попробуйте такой пример

$str = '0';
if ($str) echo 'true'; else echo 'false';
 

ys

отодвинутый новичок
tony2001

Спасибо, пропустил такую строчку:
"пустая строка и строка "0" " преобразуется в булев FALSE.
Да, это не Си :)
 

SiMM

Новичок
Интересно, при чём здесь C, в котором
if (0) printf("true");
else printf("false");
так же выдаст false?
 

Profic

just Profic (PHP5 BetaTeam)
:)
Найдите мне компилятор C который в таком коде
if ("0") printf ("true");
else printf ("false");
выдаст false :)
 
Сверху