!$ variable = $ variable if if

时间:2013-04-05 11:17:03

标签: php if-statement

我正在研究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让我疯狂 首先,我对如何将一个值分配给布尔值感到困惑 其次,我无法完全理解整个表达。

有人可以解释一下内部会发生什么,以及它如何应用于服务器上下文?

P.S。如果没有正确询问问题,请原谅。我对那里发生的事情感到困惑,不知道具体要求什么。

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

以下是代码的解释。

false === ($buf = socket_read($msgsock, 2048, PHP_NORMAL_READ))

首先,调用socket_read,结果存储在$buf中。然后将$buffalse进行比较,以查看它是否为bool且其值为false。 (===同时表示相同的类型和相等)

if (!$buf = trim($buf)) {
    continue;
}

在代码的这一部分中,首先修剪$buf并将结果存储在$buf中。然后检查$buf是否为false。如果为false,continue将采取措施。

答案 2 :(得分:0)

表达式是可拆分的。

  • $buf = trim($foo)
  • $check = !$buf
  • if ($check) { something(); }

首先得到变量,然后检查它评估为false(可能是false,可能是null可能是0),最后oyu根据该值进行切换信息。

答案 3 :(得分:0)

如果你正在寻找基础知识,那就有旅程!

试试这段代码

<?php
    $buf="0 ";// (note the spaces)
    //next try changing $buf="1 "; (note the spaces for trim)

    echo $buf ."<----Non trimmed buf<br>" ;
    $buf= trim($buf);
    echo $buf ."<----trimmed buf<br>" ;
    echo !$buf ."<----!buf<br>" ;

    if (!$buf = trim($buf))
       echo "Trimmed buf is false";
    else
       echo "Trimmed buf is True";
?>

<强>输出

0 <----Non trimmed buf
0<----trimmed buf
1<----!buf
Trimmed buf is false