首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP中有Walrus操作符吗?

PHP中有Walrus操作符吗?
EN

Stack Overflow用户
提问于 2020-08-03 20:20:13
回答 2查看 712关注 0票数 4

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

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

代码语言:javascript
复制
if ($data := socket_read ($socket, 1024)) {
     echo $data;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-03 20:35:27

如果socket_read()的返回值为“推力”或“错误”,则此操作有效。

法尔西是''0[]nullfalse

特鲁西就是其他的一切。

代码语言:javascript
复制
if ( $data = socket_read($socket, 1024) ) {
     echo $data;
}

如果你想说得更具体,你甚至可以做以下(@Benni的学分):

代码语言:javascript
复制
if ( 'foo' === $data = socket_read($socket, 1024) ) {
    echo 'data equals foo';
}

代码语言:javascript
复制
if ( is_array($data = socket_read($socket, 1024) ) {
    var_dump($data);
}

如果不确定socket_read()是否返回string,则示例可能引发异常。

在这种情况下,您可以执行以下操作:

代码语言:javascript
复制
if ( is_string($data = socket_read($socket, 1024)) ) {
     echo $data;
}

有关PHP布尔行为的更多信息,请参见https://www.php.net/manual/en/language.types.boolean.php

票数 5
EN

Stack Overflow用户

发布于 2020-08-04 13:24:27

我想我应该试着给它添加更多的上下文,也许其他人将来会发现它是有用的。

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

当你写

代码语言:javascript
复制
$var = 'foo';

不仅要将值foo赋值给$var,而且整个语句的计算结果为:

代码语言:javascript
复制
php > var_dump($var = 'foo');
string(3) "foo"

在PHP环境中使用=并不是操作符的神奇覆盖,它只是赋值也是表达式这一事实的自然副作用。

在Python中,情况并非如此。赋值运算符(同样,=)只是一个语句。它本身没有结果,因此不能在一个条件下使用。第3.8节增加了海象操作符(如问题中所述),以弥补这一差距。在Can we have assignment in a condition?“:=” syntax and assignment expressions: what and why?的问题中有很多关于这个问题的讨论。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63236415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档