Следующие два, if
s произвели разные результаты (сначала, if
echos hi, второй нет), почему? почему переменная назначения на $t
работала? это связано с локальной областью $t
внутри условия if
?
if(isset($_REQUEST["test"]) && $t=trim($_REQUEST["test"]) && !empty($t)){ echo 'hi' } if(isset($_REQUEST["test"]) && $t=trim($_REQUEST["test"])){ if(!empty($t))echo 'hi' }
&&
имеет более высокий приоритет, чем =
, поэтому первое выражение оценивается как:
isset($_REQUEST['test']) && $t = (trim($_REQUEST['test']) && !empty($t))
Поскольку !empty($t)
вычисляется до того, как что-либо присваивается переменной $t
, выражение false
. Вы можете исправить это, явно установив круглые скобки или используя менее неудобный способ написать его:
if (isset($_REQUEST['test']) && trim($_REQUEST['test'])) { echo 'hi'; }
trim($_REQUEST['test'])
будет оцениваться как true
или false
только само по себе, empty
нужно. Если вам действительно понадобится значение trim
med позже, вы можете сохранить его так:
if (isset($_REQUEST['test']) && ($t = trim($_REQUEST['test']))) { echo 'hi'; }
Если вы внесете в свой код незначительные изменения:
if(isset($_REQUEST["test"]) && ($t=trim($_REQUEST["test"])) && !empty($t)){ echo '1: hi<br/>'; } if(isset($_REQUEST["test"]) && $t=trim($_REQUEST["test"])){ if(!empty($t)) echo '2: hi<br/>'; }
Затем будут напечатаны как 1: hi
и 2: hi
. Разница – это скобка вокруг первого присваивания $ t.