在Python3.8中,有一个名为walrus (:=)的新运算符,它可以在条件内分配新的变量。我用PHP编写了一个简单的TCP套接字连接,我希望我的程序看起来更好看。
在PHP中是否有类似的东西:超文本预处理程序?
if ($data := socket_read ($socket, 1024)) {
echo $data;
}发布于 2020-08-03 20:35:27
如果socket_read()的返回值为“推力”或“错误”,则此操作有效。
法尔西是'',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布尔行为的更多信息,请参见https://www.php.net/manual/en/language.types.boolean.php。
发布于 2020-08-04 13:24:27
我想我应该试着给它添加更多的上下文,也许其他人将来会发现它是有用的。
PHP没有(或者更重要的是需要) walrus操作符的原因是,在PHP中,赋值操作符=既是语句,又是是表达式。
当你写
$var = 'foo';不仅要将值foo赋值给$var,而且整个语句的计算结果为:
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?的问题中有很多关于这个问题的讨论。
https://stackoverflow.com/questions/63236415
复制相似问题