Php 为什么此代码工作正常?-在if条件中使用等号
为什么这段代码工作正常Php 为什么此代码工作正常?-在if条件中使用等号,php,if-statement,boolean,variable-assignment,Php,If Statement,Boolean,Variable Assignment,为什么这段代码工作正常 function isLoggedIn(){ return false; //or true } if($user = isLoggedIn()) { echo "Hello ".$user['name']; //if isLoggedIn returns true, this prints } else { echo "Please login to proceed!";//if isLoggedIn returns false, this prints }
function isLoggedIn(){
return false; //or true
}
if($user = isLoggedIn())
{
echo "Hello ".$user['name']; //if isLoggedIn returns true, this prints
} else {
echo "Please login to proceed!";//if isLoggedIn returns false, this prints
}
我一直认为
if()
条件中的assignment操作符
将始终计算为true
,因为它只是计算右侧
的值是否可以分配给左侧
。该条件在分配后考虑$user。因此,根据isLoggedIn()返回的值,它将为真或假
有一个音符。这样的代码将无法按预期工作:
if($var = someFunction() && $var !== 'bad') {}
if($var = someFunction() && $var === 'good') {}
因为$var将不包含someFunction()返回的值,而是整个表达式的布尔值,如下所示:
$var = (someFunction() && $var !== 'bad');
if($var) {}
要获得所需的结果,应使用括号:
if(($var = someFunction()) && $var !== 'bad') {}
if(($var = someFunction()) && $var === 'good') {}
您可以找到详细信息。条件在分配后考虑$user。
因此,根据isLoggedIn()返回的值,它将为真或假
有一个音符。这样的代码将无法按预期工作:
if($var = someFunction() && $var !== 'bad') {}
if($var = someFunction() && $var === 'good') {}
因为$var将不包含someFunction()返回的值,而是整个表达式的布尔值,如下所示:
$var = (someFunction() && $var !== 'bad');
if($var) {}
要获得所需的结果,应使用括号:
if(($var = someFunction()) && $var !== 'bad') {}
if(($var = someFunction()) && $var === 'good') {}
您可以找到详细信息。在将
isLoggedIn()的返回赋值给$user
之后,它正在评估$user
的值。这与:
$user = isLoggedIn();
if($user) {}
它在循环中特别方便:
while($var = someFunction()) {
//do stuff with $var
}
还有更多的表达:
if($var = someFunction() && $var !== 'bad') {}
if($var = someFunction() && $var === 'good') {}
在将isLoggedIn()
的返回赋值给$user
之后,它正在评估$user
的值。这与:
$user = isLoggedIn();
if($user) {}
它在循环中特别方便:
while($var = someFunction()) {
//do stuff with $var
}
还有更多的表达:
if($var = someFunction() && $var !== 'bad') {}
if($var = someFunction() && $var === 'good') {}
它之所以有效是因为IF是真的。奇怪的是,这永远都是真的。因为您在仅使用一个=符号时正在赋值。如果要检查内容,必须使用==。它有效,因为If为TRUE。奇怪的是,这永远都是真的。因为您在仅使用一个=符号时正在赋值。如果要检查内容,必须使用==。正如大家所建议的,该语句有两个部分:
它将isLoggedIn()的值分配给$user李>
然后,它将相同的值返回给请求它的任何构造。在这种情况下,它是
返回到if()语句
值得注意的是,尽管if()语句希望接收布尔值true或false。如果If()接收到的值不是布尔值,那么它在PHP(以及JavaScript)中仍然是可以接受的。如果任何运算符或语句接收到错误类型的值,PHP在大多数情况下都会将其转换为boolean=true。正如大家所建议的,该语句有两部分:
它将isLoggedIn()的值分配给$user李>
然后,它将相同的值返回给请求它的任何构造。在这种情况下,它是
返回到if()语句
值得注意的是,尽管if()语句希望接收布尔值true或false。如果If()接收到的值不是布尔值,那么它在PHP(以及JavaScript)中仍然是可以接受的。如果任何运算符或语句接收到错误类型的值,PHP在大多数情况下都会将其转换为boolean=true。在PHP中,赋值操作实际上有一个返回值,它就是被赋值的值。您的if()
条件的工作原理与
$x = $y = $z = 42;
工作。此语句将为所有三个变量分配值42
,在功能上等同于
$z = 42;
$y = $z;
$x = $y;
在您的情况下,将执行isLoggedIn()
函数调用并返回一个值。分配给$user
的值。然后该值被“返回”到if()语句本身,并用于逻辑测试
如果您的函数返回了布尔值false或“false”值,那么“else”子句就会执行。e、 g
function returns_false() {
return false;
}
if ($foo = returns_false()) {
echo 'if was true';
} else {
echo 'if was false'; // this line will get executed
}
即使分配操作成功,重要的是分配的值,而不是操作的成功/失败。因此执行“it was false”代码路径,因为函数调用返回了一个false
,它向上传播到决策树中。在PHP中,赋值操作实际上有一个返回值,它是被赋值的值。您的if()
条件的工作原理与
$x = $y = $z = 42;
工作。此语句将为所有三个变量分配值42
,在功能上等同于
$z = 42;
$y = $z;
$x = $y;
在您的情况下,将执行isLoggedIn()
函数调用并返回一个值。分配给$user
的值。然后该值被“返回”到if()语句本身,并用于逻辑测试
如果您的函数返回了布尔值false或“false”值,那么“else”子句就会执行。e、 g
function returns_false() {
return false;
}
if ($foo = returns_false()) {
echo 'if was true';
} else {
echo 'if was false'; // this line will get executed
}
即使分配操作成功,重要的是分配的值,而不是操作的成功/失败。因此,“it was false”代码路径被执行,因为函数调用返回了一个false
,它向上传播到决策树上。“为什么这个代码工作正常?”-现在有一个开关。哈哈,我想是这样的:pI注意到您从前面给出的答案中获取了它为什么这里的问题?好奇。我不理解这个答案,评论部分会变得太长,只有OP的答案,所以我想我应该在这里发布。我理解。好吧,看来你的钱的价值已经低于了“为什么这个代码工作正常?”-现在有一个开关。哈哈,我想是这样的:pI注意到你从前面给出的答案中得到了它为什么这里的问题?好奇。我不理解这个答案,评论部分会变得太长,只有OP的答案,所以我想我应该在这里发布。我理解。好吧,看来你的钱的价值已经低于了谢谢你的解释!谢谢你的经验