我一直在啃 PHP 套接字服务器和客户端的基础知识 here .
然后我偶然发现了这些行(摘自上面链接的第一个示例,发生在 while
中):
if (false === ($buf = socket_read($msgsock, 2048, PHP_NORMAL_READ))) {
echo "socket_read() failed: reason: " . socket_strerror(socket_last_error($msgsock)) . "\n";
break 2;
}
if (!$buf = trim($buf)) {
continue;
}
我对读取部分没意见,并关闭连接以防读取错误。
但是下一个if
让我抓狂。
首先,我对如何以及需要如何为 bool 值赋值感到困惑。
其次,我很难完全理解整个表达式。
有人可以解释一下 if 内部发生了什么,以及它如何应用于服务器上下文吗?
附言如果问题没有正确提出,请原谅。我对那里发生的事情感到很困惑,不知 Prop 体要问什么。
最佳答案
在这个语句中,没有对 bool 值的赋值。我们正在比较 false
的类型和 false
的值(true false,不仅仅是 0)。你可以读到那个 here
if (false === ($buf = socket_read($msgsock, 2048, PHP_NORMAL_READ)))
然后
if (!$buf = trim($buf)) {
continue;
}
这是一样的
$buf = trim($buf);
if ($buf == false) {
continue;
}
所以,解释一下原文:
// The assignment happens first and then we're checking the boolean value
if (!$buf = trim($buf))
关于php - !$variable = $variable inside if,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15832530/