присваивание переменной php внутри, если условно - PullRequest
5 голосов
/ 29 марта 2011

Следующие два if с дали разные результаты (первый 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'
}

Ответы [ 2 ]

13 голосов
/ 29 марта 2011

&& имеет более высокий приоритет , чем =, поэтому первое выражение оценивается как:

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';
}
1 голос
/ 29 марта 2011

Если вы сделаете незначительную модификацию, подобную этой, в вашем коде:

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.

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