我一直在钻研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快把我逼疯了。
首先,我对如何为boolean赋值以及如何需要赋值感到困惑。
其次,我很难完全理解整个表达式。
有人能解释一下if里面发生了什么,以及它是如何应用到服务器上下文中的吗?
另外,如果这个问题没有问好,请原谅。我只是对那里发生的事情太困惑了,也不知道具体要问什么。
发布于 2013-04-05 19:18:58
在此语句中,没有对布尔值进行赋值。我们正在比较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))发布于 2013-04-05 19:24:50
下面是代码的解释。
false === ($buf = socket_read($msgsock, 2048, PHP_NORMAL_READ))首先,调用socket_read,并将结果存储在$buf中。然后将$buf与false进行比较,以确定它是否是bool以及它的值是否为false。(===表示同时具有相同的类型和相等)
if (!$buf = trim($buf)) {
continue;
}在这部分代码中,首先修剪$buf并将结果存储在$buf中。然后检查$buf是否为false。如果为false,continue将采取行动。
发布于 2013-04-05 19:21:54
该表达式是可拆分的。
$buf = trim($foo)$check = !$bufif ($check) { something(); }首先获取变量,然后检查它的值是否为false (可能是false,null可能是0),最后oyu根据该信息进行切换。
https://stackoverflow.com/questions/15832530
复制相似问题