为了账号安全,请及时绑定邮箱和手机立即绑定

PHP 中有海象运算符吗?

PHP 中有海象运算符吗?

PHP
弑天下 2023-09-15 09:48:27
在Python3.8中,有一个名为walrus( :=)的新运算符,它可以在条件内分配新变量。我用 PHP 编写了一个简单的 TCP 套接字连接,我希望我的程序看起来更好。PHP中是否有类似的东西:超文本预处理器?if ($data := socket_read ($socket, 1024)) {     echo $data;}
查看完整描述

2 回答

?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

如果 的返回值为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;

}

查看完整回答
反对 回复 2023-09-15
?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

我想我应该尝试为此添加更多背景信息,也许其他人将来会发现它有用。


PHP 没有(或者更重要的是,需要)海象运算符的原因是,在 PHP 中,赋值运算符=既是语句又是表达式。


当你写的时候


$var = 'foo';

您不仅将值foo分配给$var,而且整个语句都对其求值:


php > var_dump($var = 'foo');

string(3) "foo"

在 PHP 条件中使用=并不是在该上下文中对运算符进行某种神奇的覆盖,它只是赋值也是表达式这一事实的自然副作用。


在Python 中,情况并非如此。赋值运算符(同样,=)只是一个语句。它本身没有结果,因此不能在条件中使用。海象运算符是在 v3.8 中添加的(如问题中提到的),作为弥补这一差距的一种方式。在问题“我们可以在条件下进行分配吗?”中有更多关于此问题的讨论。和“:=”语法和赋值表达式:什么以及为什么?。


查看完整回答
反对 回复 2023-09-15
  • 2 回答
  • 0 关注
  • 112 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号