2 回答

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;
}

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