有人能告诉我这段代码有什么问题
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,那么为什么注意未定义的变量
抱歉语法错误
只是想知道这里发生了什么。
答案 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分配任何值并为它添加一个条件。