在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。
中