猿问

PHP 中有海象运算符吗?

在Python3.8中,有一个名为walrus( :=)的新运算符,它可以在条件内分配新变量。我用 PHP 编写了一个简单的 TCP 套接字连接,我希望我的程序看起来更好。


PHP中是否有类似的东西:超文本预处理器?


if ($data := socket_read ($socket, 1024)) {

     echo $data;

}


弑天下
浏览 114回答 2
2回答

qq_花开花谢_0

如果 的返回值为socket_read()“thruthy”或“falsy”,则此方法有效。假值是'', 0, [],null或false。真实就是别的什么。if ( $data = socket_read($socket, 1024) ) {     echo $data;}如果您想更具体,您甚至可以执行以下操作(感谢@Benni):if ( 'foo' === $data = socket_read($socket, 1024) ) {    echo 'data equals foo';}或者if ( is_array($data = socket_read($socket, 1024) ) {    var_dump($data);}如果您不确定socket_read()返回一个 ,您的示例可能会引发异常string。在这种情况下,您可以执行以下操作:if ( is_string($data = socket_read($socket, 1024)) ) {     echo $data;}

繁星点点滴滴

我想我应该尝试为此添加更多背景信息,也许其他人将来会发现它有用。PHP 没有(或者更重要的是,需要)海象运算符的原因是,在 PHP 中,赋值运算符=既是语句又是表达式。当你写的时候$var = 'foo';您不仅将值foo分配给$var,而且整个语句都对其求值:php > var_dump($var = 'foo');string(3) "foo"在 PHP 条件中使用=并不是在该上下文中对运算符进行某种神奇的覆盖,它只是赋值也是表达式这一事实的自然副作用。在Python 中,情况并非如此。赋值运算符(同样,=)只是一个语句。它本身没有结果,因此不能在条件中使用。海象运算符是在 v3.8 中添加的(如问题中提到的),作为弥补这一差距的一种方式。在问题“我们可以在条件下进行分配吗?”中有更多关于此问题的讨论。和“:=”语法和赋值表达式:什么以及为什么?。
随时随地看视频慕课网APP
我要回答