PHP, если оператор не работает правильно, не нуль - PullRequest
0 голосов
/ 29 июня 2011

Я изо всех сил пытаюсь понять, почему мое утверждение if ниже всегда приводит к ложному. Я создаю функцию, которая будет проверять входящие подключения к сценарию, который будет отклонять подключения, сделанные определенными ботами.

В моем тесте, приведенном ниже, при применении логики if я ожидаю ИСТИНА, так как значения $value и $test массива должны совпадать ... в результате чего получается NOT NULL?

$bots = array(0 => "PaperLiBot", 1 => "TweetmemeBot", 2 => "Appsfirebot", 3 => "PycURL", 4 => "JS-Kit", 5 => "Python-urllib");

$test = strtolower("PaperLiBot");


foreach($bots as $value)
{   
    $i = strtolower(strpos($value, $test));

    if ($i != NULL)
    {
        echo "Bot is found";
        exit;
    }else
    {
        echo "not found";
    }

}

Ответы [ 4 ]

3 голосов
/ 29 июня 2011

Я думаю, вы пытаетесь достичь этого

foreach($bots as $value)
{   
    $i = strpos(strtolower($value), $test);

    if ($i !== false){
        echo "Bot is found";
        exit;
    }else{
        echo "not found";
    }

}
1 голос
/ 29 июня 2011

Вы хотите написать:

if(stristr($value, $test)){
 // found
}else{
 // not found

}
0 голосов
/ 29 июня 2011

правильный способ проверить, установлена ​​ли переменная в NULL:

if(!is_null($var)){
    [my code]
}

strpos возвращает логическое значение, а не NULL.

, если вы не уверены в содержимомпеременной, вы всегда можете отладить ее с помощью простого

var_dump($var);
0 голосов
/ 29 июня 2011

null в PHP взаимно преобразуемо к типу '0', '', '' и т.д.1003 * обратите внимание на дополнительные = в операторе неравенства.Это заставляет PHP сравнивать тип И значение, а не только значение.При сравнении значения PHP будет приводить тип по своему усмотрению, чтобы тест работал, что означает, что null == 0 - это истина, а null === 0 - это ложь.

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