присваивание и проверка переменной - PullRequest
0 голосов
/ 01 мая 2018

Может кто-нибудь сказать мне, что не так с этим кодом

function someFunction($num=null) {
  return $num;
}
if ($name = someFunction('mystr') && $name ) {
 echo 'hello ';
}else {
  echo 'hi';
}

Почему он переходит в другое состояние и уведомляет меня о неопределенной переменной $ name

Отредактировано: - если я так сделаю

if($name = someFunction() && $name ){
   echo 'hello';
} else {
   echo 'hi';
}

на этот раз он также работает в другом состоянии, как и должно, но он также не показывает ошибку, как я понимаю, php просто проверьте мое первое условие $ name = someFunction () и его сбой, а затем просто

но если я делаю так, как делаю ранее, $ name = someFunction ('str'), то теперь $ name установлено, так почему уведомление о неопределенной переменной

извините за плохой грамматик

просто хочу знать, что здесь происходит.

Ответы [ 3 ]

0 голосов
/ 01 мая 2018

Вы кодируете вывод: привет, потому что есть $ name, во втором всегда ноль.

function someFunction($num=null) {
  return $num;
}
$name = someFunction('mystr');
if ($name && $name ) {
 echo 'hello ';
}else {
echo 'hi';
  }

вывод: mystr && mystr = 1, затем вывод привет

0 голосов
/ 01 мая 2018

Это потому, что логические операторы, такие как &&, имеют более высокий приоритет, чем оператор присваивания =. Вы можете прочитать больше об этом здесь: http://php.net/manual/en/language.operators.precedence.php

Линия

if ($name = someFunction('mystr') && $name ) {

оценивается так:

if ($name = (someFunction('mystr') && $name) ) {

где выражение во внутренних скобках вычисляется первым. Поскольку $name не был определен до этого момента, создается уведомление.

Я думаю что вы пытаетесь сделать, это:

if (($name = someFunction('mystr')) && $name ) {

, где вы присваиваете значение mystr на $name, а затем также оцениваете, что оно "истинно" . Но, как указано в комментариях, это немного странный подход. Следующий код будет эквивалентен:

$name = 'mystr';

if ($name) {
  ...

Это похоже на проблему, которая была слишком урезана, чтобы объяснить ее, потому что не совсем понятно почему вы это делаете.

0 голосов
/ 01 мая 2018

Вы ничего не присвоили своей переменной $ name, и, поскольку это условие AND, первое становится истинным, а второе не присваивает значение вашему $ name и не добавляет условия для его работы.

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