在 Symfony 核心中发现一段有趣的代码
if ('' !== $host = $route->getHost()) {
...
}
!== 的优先级高于=,但它在逻辑上是如何工作的呢?第一部分很清楚,但其余部分呢?
我创建了一个小样本,但仍然不清楚:sample http://sandbox.onlinephpfunctions.com/code/205f7fa43e9f348b8669074c94d8fc182e28fd6a
要点是:赋值的左侧必须是变量!在您的示例中实现此目的的唯一可能方法是首先评估分配 - 这就是 php 实际所做的。
添加括号可以清楚地表明发生了什么
'' !== $host = $route->getHost()
// is equal to
'' !== ($host = $route->getHost())
// the other way wouldn't work
// ('' != $host) = $route->getHost()
所以条件为真,如果返回值$route->getHost()
是一个非空字符串,在每种情况下,返回值都分配给$host
.
此外,您还可以看看grammer http://lxr.php.net/xref/PHP-5.6/Zend/zend_language_parser.y#778 of PHP
...
variable '=' expr |
variable '=' '&' variable |
variable '=' '&' T_NEW class_name_reference | ...
如果你读过运算符优先手册 http://php.net/manual/en/language.operators.precedence.php仔细翻页,你会看到这个通知
虽然 = 的优先级低于大多数其他运算符,但 PHP 会
仍然允许类似于以下的表达式: if (!$a = foo()), in
在这种情况下,foo()的返回值被放入$a中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)