!$ variable = $ variable if if

jol*_*olt 2 php if-statement

我一边啃着在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如果问题没有得到正确询问,请原谅.我对那里发生的事情感到困惑,不知道具体要求什么.

Raw*_*ode 5

使用此语句,没有赋值给布尔值.我们正在比较的类型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)