присваивание переменной php внутри if conditional

Следующие два, 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.