Operator priority is an important knowledge point that a programmer must understand and master. Let’s take a look at the PHP operator priority article.
I saw a question in Lao Wang’s technical manual today:
代码如下 | 复制代码 |
What is the output?
This question may seem simple at first glance, but in fact it is not simple if you think about it carefully.
If we say Boolean and the previous part, it is due to a priority issue, but if it is just a priority issue, then the result should be:
代码如下 | 复制代码 |
$a = (100 && $b) = 200 |
The actual result is that the high-priority && is indeed given up to the low-priority =, so that $b = 200 is combined first.
The reason is that PHP does not fully comply with the definition of priority. This is also explained in the PHP manual:
Note: Although = has a lower precedence than most other operators, PHP will still allow expressions similar to the following: if (!$a = foo()), in which case the return value of foo() is put into $a.
I don’t personally express my opinion on such a design. Anyway, in C language, similar statements like this are judged to be grammatically incorrect. PHP adopts such a design, probably for historical reasons,
Curious students may want to know why. Netizen jayeeliu also asked before:
Hello laruence:
Ask a question about PHP operator priority
The code is as follows | Copy code | ||||
|
代码如下 | 复制代码 |
(($t == 1) && $tt) = 2 |
The code is as follows | Copy code |
(($t == 1) && $tt) = 2 |
代码如下 | 复制代码 |
($t == 1) && ($tt = 2) |
The code is as follows | Copy code |
($t == 1) && ($tt = 2)
|
代码如下 | 复制代码 |
expr_without_variable: |
The code is as follows | Copy code |
<🎜>expr_without_variable: // There are implicit rules, which is equivalent to T_BOOLEAN_AND becoming a "unary operator". | expr T_BOOLEAN_AND { zend_do_boolean_and_begin(&$1, &$2 TSRMLS_CC); } exp<🎜> |
Finally, by the way, PHP corresponds to T_BOOLEAN_AND and also defines T_LOGICAL_AND(and) and T_LOGICAL_OR(or). The priority of both of these is lower than the equal sign, so there will be many sample codes for PHP introductory textbooks. Classic:
The code is as follows | Copy code | ||||
|
代码如下 | 复制代码 |
$person = $who or $person = "laruence"; |
The code is as follows | Copy code |
$person = $who or $person = "laruence"; |
代码如下 | 复制代码 |
$person = empty($who)? "laruence" : $who; |
The code is as follows | Copy code |
<🎜>$person = empty($who)? "laruence" : $who;<🎜> |
| 运算符 | ||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
左 | , | ||||||||||||||||||||||||||||||||||||||||||
左
|
or |