问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

php中的运算符优先级是什么样的

发布网友 发布时间:2022-04-07 10:36

我来回答

3个回答

懂视网 时间:2022-04-07 14:57

这样的设计, 个人不发表看法, 反正在C语言中, 这样类似的语句是判定为语法错的. PHP采用这样的设计, 很可能是历史原因,

有好奇的同学, 会想知道到底为什么, 之前jayeeliu网友也问过:

laruence你好:

问一个php运算符优先级的问题

$t == 1 && $tt = 2

按照php运算符优先级应该是

(($t == 1) && $tt) = 2

这个顺序执行,但实际上应该是

($t == 1) && ($tt = 2)

我有些不太理解。

其实也简单, 运算符优先级是在存在二义性文法的时候的一种规约规则选择的手段, 而PHP的语法分析文件定义中, 却让等号和T_BOOLEAN_AND(&&)之前不存在了规约冲突:

expr_without_variable:
 // 有隐规则存在, 相当于T_BOOLEAN_AND成为了"一元操作符".
 | expr T_BOOLEAN_AND { zend_do_boolean_and_begin(&$1, &$2 TSRMLS_CC); } expr

最后, 顺便说一下, PHP对应于T_BOOLEAN_AND 还定义了 T_LOGICAL_AND(and) 和 T_LOGICAL_OR(or) , 这俩个的优先级都低于等号, 于是就会有了, 很多PHP入门教材示例代码中经典的:

$result = mysql_query(*) or die(mysql_error());

类似的还可以用or来实现三元操作符(?:)的功能:

$person = $who or $person = "laruence";
//等同于:
$person = empty($who)? "laruence" : $who;

更多PHP相关知识,请访问PHP中文网!

热心网友 时间:2022-04-07 12:05

下表按照优先级从高到低列出了运算符。同一行中的运算符具有相同优先级,此时它们的结合方向决定求值顺序。

运算符优先级

结合方向

运算符

附加信息


clone new
clone 和 new


[
array()


**
算术运算符



++
--
~
(int)
(float)
(string)
(array)
(object)
(bool)
@

类型和递增/递减


instanceof

类型


!

逻辑运算符



*
/
%

算术运算符



+
-
.

算术运算符和字符串运算符



<<
>>

位运算符



<
<=
>
>=

比较运算符



==
!=
===
!==
<>
<=>

比较运算符


&

位运算符和引用


^

位运算符


|

位运算符


&&

逻辑运算符


||

逻辑运算符


??

比较运算符


? :

ternary

right

=
+=
-=
*=
**=
/=
.=
%=
&=
|=
^=
<<=
>>=

赋值运算符


and

逻辑运算符


xor

逻辑运算符


or

逻辑运算符

Example #1 结合方向

<?php
$a = 3 * 3 % 5; // (3 * 3) % 5 = 4
// ternary operator associativity differs from C/C++
$a = true ? 0 : true ? 1 : 2; // (true ? 0 : true) ? 1 : 2 = 2

$a = 1;
$b = 2;
$a = $b += 3; // $a = ($b += 3) -> $a = 5, $b = 5
?>

Operator precedence and associativity only determine how expressions
are grouped, they do not specify an order of evaluation. PHP does not
(in the general case) specify in which order an expression is evaluated
and code that assumes a specific order of evaluation should be avoided,
because the behavior can change between versions of PHP or depending on
the surrounding code.

Example #2 Undefined order of evaluation

<?php
$a = 1;
echo $a + $a++; // may print either 2 or 3

$i = 1;
$array[$i] = $i++; // may set either index 1 or 2
?>

Note:

尽管 = 比其它大多数的运算符的优先级低,PHP
仍旧允许类似如下的表达式:if (!$a = foo()),在此例中
foo() 的返回值被赋给了 $a。

热心网友 时间:2022-04-07 13:23

楼上复制粘贴的什么玩意儿?看这个吧,php的所有运算符优先级文档都在这里了:网页链接,希望采纳

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
八月中国最凉快的地方 八月份哪里最凉快,去哪旅游好?美丽的地方 乱字同韵字是什么意思 华硕笔记本电脑触摸板怎么开笔记本电脑触摸板怎么开启和关闭_百度知 ... 陕西职务侵占案立案准则 结婚后我的恋情维系了十年,怎么做到的? 玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 打开Excel显示不同单元格格式太多,表里的格式都没了,但数值还有,问:怎么恢复格式??? excel怎么恢复数字格式 Excel中这个单元格如何恢复成正常格式 五羊本田统御125的性能如何,骑乘感受怎样? 五羊本田统御125最大功率多少 五羊本田统御125一8是进口发动机吗 五羊本田统御125价格 众摩友们,五羊本田统御125欧II和欧III有什么区别价格分别是多少?谢谢 有谁知道五羊本田统御125摩托车怎么样!我偶尔拉些货不多百来斤!还有那个旗御1254档位的怎么样? 五羊本田统御125-8摩托车的性能及质量好不好 五羊本田统御125电瓶是干式还是湿式 vivoy53支持快充吗 五羊本田统御125有几个档 五羊本田统御有几款 Y53的处理器介绍? Y53主要参数是什么? HUAWEIb3手环尾插断了可以换吗? 华为b3手环尾插坏了可以换充电口不? 华为B3手环可以拆吗 关于php运算符优先级问题 玩魔兽争霸的时候鼠标有延迟怎么办? 急急急 !!!玩魔兽争霸时出现鼠标延迟怎么办啊!!! 玩魔兽争霸3时鼠标有延迟? 玩魔兽争霸3鼠标有点延时 玩魔兽争霸 鼠标延迟的问题? 魔兽争霸3冰封王座 鼠标有点延迟的感觉 玩魔兽争霸鼠标延迟怎么办啊,急,我的是笔记本。 玩魔兽争霸3鼠标有延迟。怎么办》? 魔兽争霸3鼠标延迟 我鼠标玩WAR3很飘不准感觉有延迟怎么回事 为什么我玩魔兽争霸3鼠标感觉有点延迟?高手请进 玩魔兽争霸3和CS鼠标有延迟 war3,鼠标有种延迟感,. 玩魔兽争霸鼠标延迟 魔兽争霸鼠标延迟 为什么打War3总觉得鼠标指针移动时有延迟啊?怎么解决? 我的屏幕是宽屏 玩魔兽争霸3的时候 鼠标移动特别慢 而且还有拖拽延迟 ,怎么才能解决 魔兽争霸鼠标延迟,鼠标很飘的问题 联想小新air 13 pro背光键盘怎么打开? 新买的联想小新air pro13快捷键复制粘贴后电脑触摸板不能马上响应,要等