PHP if заявления — логика

some_function($input) возвращает целое число 23

$other_int имеет значение, которое не равно 23

Фрагмент кода 1

if ($int = some_function($input) && $int != $other_int) {...}

Фрагмент кода 2

$int = some_function($input);
if ($int != $other_int) {...}

Я кодировал фрагмент 1, думая, что выражение if вернет true, учитывая приведенные выше условия. Я был неправ.

Оператор if во фрагменте 2 является верным.

Зачем?

0

Решение

Как уже упоминали другие, && имеет более высокий приоритет, чем назначение, поэтому вы выполняете логическую операцию до Вы назначаете на переменную.

Вместо && ты можешь использовать and, and а также or имеют более низкий приоритет, чем назначение, и предназначены именно для таких ситуаций, как это.

if ($int = some_function($input) and $int != $other_int)
3

Другие решения

Таким образом, назначения в предложении if, как это, являются плохой практикой по причине. Тем не менее, вы не назначаете то, что вы думаете. Это то, что вы на самом деле делаете:

$int = (some_function($input) && $int != $other_int);

который оценивается как истина. Чтобы получить желаемый результат, измените код на

if (($int = some_function($input)) && ($int != $other_int)) {...}

Но на самом деле, не назначайте переменные в операторе if ().

4

&& и != имеют более высокий приоритет, чем оператор присваивания =,

Увидеть http://www.php.net/manual/en/language.operators.precedence.php

Итак, внутри условно:

if ($int = some_function($input) && $int != $other_int) {...}

Выполняет != тогда &&, но $int еще не инициализирован (при условии, что вы не инициализировали его за пределами этого условия), поэтому правая сторона != всегда возвращает ложь.

1

Вы не можете присвоить такое значение внутри if утверждение И сравнить это значение в том же утверждении

https://3v4l.org/FlE6u

<?php

function somefunc() {
return 23;
}

if($int = somefunc() && $int == 23) {
echo 'Equal';
} else {
echo 'Not Equal';
}
echo "\n";
var_dump($int);

Вы заметите ошибку

Примечание: неопределенная переменная: int in / in / GHVKs в строке 7

И в конце $int является false, Назначьте это за пределами вашего if

0

Интересно, что переменная не может быть инициализирована и использована в условии if заявление. Возможно, вы нашли ошибку / функцию php.

function some_function()
{
return 23;
}

$intA = 0;
if ($intA = some_function()
&& $intA != $other_int
) {
echo 'hello world!'; // works fine
}

if ($intB = some_function()
&& $intB != $other_int
) {
echo 'hello world!'; // PHP Notice:  Undefined variable: intB
}
0
По вопросам рекламы [email protected]