在Symfony核心中找到了一段有趣的代码
if ('' !== $host = $route->getHost()) {
...
}
!==的优先级高于=但是它在逻辑上如何工作?第一部分是明确的,但其余部分?
我已经创建了一些示例,但它仍然不清楚:sample
答案 0 :(得分:3)
关键是:作业的左侧必须是变量!在您的示例中实现此目的的唯一可能方法是首先评估赋值 - 这实际上是php的作用。
添加括号表明,会发生什么
'' !== $host = $route->getHost()
// is equal to
'' !== ($host = $route->getHost())
// the other way wouldn't work
// ('' != $host) = $route->getHost()
因此条件为真,如果$route->getHost()
的返回值是非空字符串,并且在每种情况下,返回值都分配给$host
。
此外,您可以查看PHP的grammer
...
variable '=' expr |
variable '=' '&' variable |
variable '=' '&' T_NEW class_name_reference | ...
如果您仔细阅读了运营商precendence manual页面,您会看到此通知
虽然=的优先级低于大多数其他运算符,但PHP会 仍然允许类似于以下的表达式:if(!$ a = foo())in 在哪种情况下,foo()的返回值被放入$ a。