php "if" условие загадка - PullRequest
4 голосов
/ 09 июля 2011

Я сталкиваюсь с забавной проблемой с озорным условием "если":

$condition1="53==56";
$condition2="53==57";
$condition3="53==58";
$condition=$condition1."||".$condition2."||".$condition3;
if($condition)
{
    echo "blah";
}
else
{
    echo "foo";
}

Почему условие if проходит?Почему php эхо "бла"?Что мне делать, чтобы php оценивал оператор if и печатал foo?

Ответы [ 9 ]

8 голосов
/ 09 июля 2011

Проблема в том, что вы помещаете выражения в строки!

Ваши переменные $condition1, $condition2 и $condition3 содержат строки, а не результат выражения, и то же самое относится к вашей переменной $condition, которая будет выглядеть как 53==56||53==57||53==58. Когда PHP оценивает строку, он считает ее true, если она не пуста и не равна 0, поэтому ваш скрипт выведет blah.

Чтобы исправить это, вам просто нужно взять выражения из строк. Это должно выглядеть так:

$condition1 = 53 == 56; // false
$condition2 = 53 == 57; // false
$condition3 = 53 == 58; // false
$condition = $condition1 || $condition2 || $condition3; // false || false || false = false

if ($condition) {
    echo 'blah';
} else {
    echo 'foo'; // This will be output
}
7 голосов
/ 09 июля 2011

Вы оцениваете строки как логические значения; они всегда будут верны (кроме строк "" и "0". Избавьтесь почти от всех кавычек в вашей программе.

5 голосов
/ 09 июля 2011

Это не условия, а строки.

$condition1=53==56;
$condition2=53==57;
$condition3=53==58;
$condition=$condition1 || $condition2 || $condition3;
if($condition)
{
    echo "blah";
}
else
{
    echo "foo";
}
4 голосов
/ 09 июля 2011

Все $condition* переменные будут иметь значение true. Вот как это видит PHP:

if("53==56" || "53==57" || "53==58")

То, что вы хотите, это:

$condition1 = 53==56;
$condition2 = 53==57;
$condition3 = 53==58;
4 голосов
/ 09 июля 2011

Поскольку вы не проверяете эти переменные, он говорит, что if (String) всегда будет возвращать true.(если "")

Вы должны делать:

if(53==56 || 53==57 || 53==58)
{
    echo "blah";
}
else
{
    echo "foo";
}
2 голосов
/ 09 июля 2011

Вы объединяете строку вместе, непустая строка равна TRUE в php.

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

Это потому, что вы оцениваете строку, а строки, отличные от пустых строк, оцениваются как true.

1 голос
/ 09 июля 2011

Строка всегда оценивается как true, если она не пуста
И, между прочим, php делает неявное преобразование в логическое значение

1 голос
/ 09 июля 2011

Потому что когда проходит if, условие $ представляет собой строку (конкатенацию), содержащую текст ваших условий.Попробуйте использовать if(eval($condition)).

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