变量分配和检查

时间:2018-05-01 15:50:20

标签: php function variables conditional-statements

有人能告诉我这段代码有什么问题

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 :(得分:2)

这是因为像&&这样的逻辑运算符的优先级高于赋值运算符=。您可以在此处详细了解: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,然后评估它是"truthy"。但正如评论中指出的那样,这是一种奇怪的方法。以下代码是等效的:

$name = 'mystr';

if ($name) {
  ...

这有点像一个问题,为了解释它已经被削减了一点,因为它并不是很清楚为什么你这样做。

答案 1 :(得分:1)

你的代码输出:嗨,因为第二个$ name总是为空。

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

输出:mystr&& mystr = 1然后输出为hello

答案 2 :(得分:0)

你没有为你的变量$ name分配任何东西,因为它是一个AND条件,第一个得到真,但第二个没有给你的$ name分配任何值并为它添加一个条件。