Php !$变量=$variable-inside-if

Php !$变量=$variable-inside-if,php,if-statement,Php,If Statement,我一直在学习PHP套接字服务器和客户端的基础知识 然后我偶然发现了这些行(摘自上面链接的第一个示例,发生在中,而): 我可以阅读部分,并关闭连接,以防有错误的阅读 但是下一个如果让我发疯了。 首先,我对如何给布尔赋值感到困惑。 其次,我很难完全理解整个表达 有人能解释一下if内部发生了什么,以及它如何应用于服务器上下文吗 如果这个问题问得不恰当,请原谅。我对那里发生的事情太困惑了,不知道具体要问什么。有了这句话,就没有布尔赋值了。我们正在比较false的类型和false的值(true-false

我一直在学习PHP套接字服务器和客户端的基础知识

然后我偶然发现了这些行(摘自上面链接的第一个示例,发生在
中,而
):

我可以阅读部分,并关闭连接,以防有错误的阅读

但是下一个
如果
让我发疯了。
首先,我对如何给布尔赋值感到困惑。
其次,我很难完全理解整个表达

有人能解释一下if内部发生了什么,以及它如何应用于服务器上下文吗


如果这个问题问得不恰当,请原谅。我对那里发生的事情太困惑了,不知道具体要问什么。

有了这句话,就没有布尔赋值了。我们正在比较
false
的类型和
false
的值(true-false,而不仅仅是0)。你可以读一下

然后

这和

$buf = trim($buf);
if ($buf == false) {
  continue;
}
因此,为了解释原文:

// The assignment happens first and then we're checking the boolean value
if (!$buf = trim($buf))

表达式是可拆分的

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

首先获取变量,然后检查它的计算结果是否为false(可能是
false
,可能是
null
可能是
0
),最后根据该信息进行切换。

下面是对代码的解释

false === ($buf = socket_read($msgsock, 2048, PHP_NORMAL_READ))
首先,调用
socket\u read
,结果存储在
$buf
中。然后将
$buf
false
进行比较,以查看它是否为
bool
,其值是否为
false
。(
==
表示同时具有相同类型和相等性)

在这部分代码中,首先修剪
$buf
,结果存储在
$buf
中。然后检查
$buf
是否为
false
。如果为false,
继续
采取行动。

如果您正在寻找基础知识,请踏上征程! 试试这个代码

<?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

0如果表达式在括号内,是否会有相同的结果
!($buf=trim($buf))
?@psycketom是的,这将是相同的。您可以查看优先概念以更好地理解它:+1,正如我现在所想的那样!所以我发布了我尝试过的东西!
false === ($buf = socket_read($msgsock, 2048, PHP_NORMAL_READ))
if (!$buf = trim($buf)) {
    continue;
}
<?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