提问人:user3271784 提问时间:2/6/2014 最后编辑:user2864740user3271784 更新时间:9/20/2015 访问量:110
PHP 中的优先运算符 'OR' 和 '='
Precedence operator 'OR' and '=' in PHP
答:
1赞
gherkins
2/6/2014
#1
因为是真的。1
你说的是$a OR $a = 'somthing';
a 为 true 或将其设置为“something”
. 好吧,a 是真的,所以它不会被设置,而下面的代码就可以了。
$a = false;
$a OR $a = 'somthing';
echo $a; //"something"
2赞
Alireza Fallah
2/6/2014
#2
当您在两个语句之间放置 OR 时,如果第一个语句返回 true,则永远不会执行第二个语句。
在这种情况下,第一个语句 ( ) 返回 true ( 因为 ),所以$a
$a = 1
第二个 ( $ ) 不会被执行。a = 'somthing';
评论
1赞
VolkerK
2/6/2014
还要记住,docs.php.net/language.operators.precedence 说:Operator precedence and associativity only determine how expressions are grouped, they do not specify an order of evaluation.
1赞
user3271784
2/6/2014
那么,为什么 5+1*3 = 8 ?我认为,* - 比 + 优先。它的权利。就我而言,我认为:$a = 'something' //先做(向上优先),然后是 OR。
0赞
Grijesh Chauhan
2/6/2014
我不同意你的回答,没有解释为什么 OR 的优先级更高=
0赞
Alireza Fallah
2/6/2014
$a OR $a = 'somthing'
,这里 ,表示if(!$a) { $a = 'somthing' }
1赞
Grijesh Chauhan
2/6/2014
@AlirezaFallah您添加的信息是正确的并且您理解正确,但正如我的意思,它并没有回答“为什么 OR 的优先级高于 =”。这是因为程序员通常喜欢写这样的表达式,它应该是 pareses as 和 强加这个常数语言,编写者决定保持高于 OR 的优先级。$a OR $a = 'somthing'
$a OR ($a = 'somthing')
=
1赞
Grijesh Chauhan
2/6/2014
#3
因为如果 OR 具有更高的优先级,那么
$a OR $a = 'somthing'
将被解析为:
($a OR $a) = 'somthing'
这在技术上是错误的,因为你不能赋值给一个表达式(而程序员希望像这样编写表达式,所以它应该是一个有效的表达式)。
因为算子的优先级很低,因此表达式被简化为 并且根据短路第一操作数,即被计算为 和 第二操作数表达式未计算并保持不变。or
$a OR $a = 'somthing'
$a OR ($a = 'somthing')
$a
true
a
1
请记住,优先级规则派生语法规则,从而告诉如何解析表达式。但优先级是一个编译时属性,它告诉我们表达式的结构。计算是一种运行时行为,它告诉我们表达式的计算方式(因此表达式的计算方式无法完全由优先级确定)。PHP文档似乎也这么说:
运算符优先级
运算符优先级和关联性仅决定表达式如何 分组,它们不指定评估顺序。PHP 没有 (在一般情况下)指定表达式的顺序 已计算,并且假定特定计算顺序的代码应 避免,因为该行为可能会在 PHP 或 取决于周围的代码。
评论
0赞
Grijesh Chauhan
2/6/2014
@user3271784 欢迎您的到来。我刚刚在 Alireza Fallah 的回答中添加了一条评论,也读了。如果您知道正式语法,请阅读链接答案。
0赞
Grijesh Chauhan
2/6/2014
@AlirezaFallah我又加了几行,希望你能找到更好的。
评论