我一边啃着在PHP插槽服务器和客户端的基础知识在这里.
然后我偶然发现了这些行(摘自上面链接的第一个例子,发生在里面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;
}
Run Code Online (Sandbox Code Playgroud)
我对阅读部分没问题,并且在读取错误的情况下关闭连接.
但那接下来if让我疯了.
首先,我对如何将一个值分配给布尔值感到困惑.
其次,我无法完全理解整个表达.
有人可以解释一下内部会发生什么,以及它如何应用于服务器上下文?
PS如果问题没有得到正确询问,请原谅.我对那里发生的事情感到困惑,不知道具体要求什么.
使用此语句,没有赋值给布尔值.我们正在比较的类型false和值false(真假,不仅仅是0).你可以在这里阅读
if (false === ($buf = socket_read($msgsock, 2048, PHP_NORMAL_READ)))
Run Code Online (Sandbox Code Playgroud)
然后
if (!$buf = trim($buf)) {
continue;
}
Run Code Online (Sandbox Code Playgroud)
这是一样的
$buf = trim($buf);
if ($buf == false) {
continue;
}
Run Code Online (Sandbox Code Playgroud)
所以,解释原文:
// The assignment happens first and then we're checking the boolean value
if (!$buf = trim($buf))
Run Code Online (Sandbox Code Playgroud)