Проблема с логическими значениями в PHP - PullRequest
1 голос
/ 10 июля 2011

У меня есть некоторые проблемы с обработкой логических значений в PHP.Это скрипт проверки перед сохранением данных в базе данных.Я написал глобальный валидатор, который будет проверять и возвращать логическое значение, если проверка прошла успешно.Вот мой код.

    //VALIDATE 
    $isValid = true;
    foreach($team as $key=>$val) {
        if(!is_array($val)){
            $isValid = $isValid && validate($val, $key);
        }
    }
    for($it=0;$it<count($team['members']);$it++){
        foreach($team['members'][$it] as $key=>$val) {
            $isValid = $isValid && validate($val, $key);
        }
    }

    if(!$isValid) { // EDITED: if(!isValid)
        echo "validation error";
        exit(1);
    }

    //END OF VALIDATE

Функция проверки работает правильно, но иногда я получаю $isValid = true или другой способ, когда пытаюсь выполнить несколько тестовых случаев.Хм .. Что я тут не так делаю?

Ответы [ 5 ]

2 голосов
/ 10 июля 2011

Пожалуйста, проверьте, если эта форма делает трюк:

if( false === $isValid) {

    echo "validation error";
    exit(1);

}

Обратите внимание, что ( ! $isValid ) или (false == $isValid ) в некоторых случаях возвращают результаты, которые на первый взгляд выглядят неверно. См., Например, подсказку в strpos() документации .

На самом деле результаты хороши, поскольку операционная строка ! или == пытается привести операнды «полезным» способом.

Тем не менее, всегда лучше использовать оператор ===, поскольку он проверяет значения и типы операндов . Пожалуйста, смотрите Обзор оператора .

1 голос
/ 10 июля 2011
   if(!isValid) {

isValid не имеет доларов, (вам нужно дать переменным в PHP немного денег), поэтому:

       if(!$isValid) {
1 голос
/ 10 июля 2011

if(!isValid) { возвращается к if (!"isValid"), если нет постоянной isValid. Вы, вероятно, имели в виду if (!$isValid) {.

0 голосов
/ 07 мая 2014

Источник: http://bit.ly/1hxDmVR

Вот пример кода для работы с логическими операторами в PHP.Надеюсь, это будет полезно:

<html>

<head>
<title>Logical</title>
</head>
<body>
<?php
$a=10;
$b=20;
if($a>$b)
{
    echo " A is Greater";
}
elseif($a<$b)
{
    echo " A is lesser";
}
else
{
     echo "A and B are equal";
}
?>
<?php
    $c=30;
    $d=40;
   //if(($a<$c)AND($b<$d))
   if(($a<$c)&&($b<$d))
   {
       echo "A and B are larger";
   }
   if(isset($d))
       $d=100;
   echo $d;
   unset($d);
?>
<?php
    $var1=2;
    switch($var1)
    {
        case 1:echo "var1 is 1";
               break;
        case 2:echo "var1 is 2";
               break;
        case 3:echo "var1 is 3";
               break;
        default:echo "var1 is unknown";
    }
?>
</body>
</html>
0 голосов
/ 10 июля 2011

Я думаю, что проблема в том, что ваша переменная $ isValid может много раз изменяться в циклах и к концу вашего кода просто применяется к последнему значению в вашем конечном цикле.сначала true, а затем только установите его в false, если проверка достоверности не удалась, а не просто присваивайте ее значение на основе каждой проверки достоверности.

...