PHP有条件分配



在Symfony Core

中找到了一个有趣的代码
if ('' !== $host = $route->getHost()) {
    ...
}

!==的优先级高于=,但是它在逻辑上如何工作?第一部分很清楚,但其余部分?

我已经创建了一些样本,但仍然不清楚:示例

重点是:分配的左侧必须是一个变量!在您的示例中,实现这一目标的唯一可能方法是首先评估作业 - 这是PHP实际上所做的。

添加括号很清楚,发生了什么

'' !== $host = $route->getHost()
// is equal to
'' !== ($host = $route->getHost())
// the other way wouldn't work
// ('' != $host) = $route->getHost()

因此,条件是正确的,如果$route->getHost()的返回值是一个非空字符串,在每种情况下,将返回值分配给$host

此外,您可以看一下PHP的语法

...
variable '=' expr |
variable '=' '&' variable |
variable '=' '&' T_NEW class_name_reference | ...

如果您仔细阅读了操作员预先指定手册页,您会看到此通知

虽然=比大多数其他操作员的优先级低,但PHP将 仍然允许表达式类似于以下内容:if(!$ a = foo()),in 在这种情况下,将foo()的返回值放入$ a。

最新更新