php比优先级
① php 优先级问题
php三元运算符的顺序是从左向右的
原始 $a = $b < $c ? ($c-$b) ? 1 : ($b-$c) > 0 : ($b+$c) ? 0 : $b*$c;
先计算优先级高于三元运算符的
$a = 20 < 40 ? 20 ? 1 : -20 > 0 : 60 ? 0 : 800;
$a = 0 ? 20 ? 1 : 0 : 60 ? 0 : 800;
然后从左测第一个可执行的三元运算开始执行 20 ? 1 : 0 为 1
$a = 0 ? 1 : 60 ? 0 : 800;
再从左测第一个可执行的三元运算开始执行 0 ? 1 : 60 为 60
$a = 60 ? 0 : 800;
最终
$a = 0
为了避免工作中出现这种情况,建议避免出现比较长的三元运算表达式
② php中的运算符优先级是什么样的
下表按照优先级从高到低列出了运算符。同一行中的运算符具有相同优先级,此时它们的结合方向决定求值顺序。
运算符优先级
结合方向
运算符
附加信息
无
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。
③ 关于php 三元运算符的优先级问题。请教
三元运算符的优先级是从右到左的,因此上面顺序是:
$i = 2;
先运行:($i == 2 ? "A" : $i == 1)
然后再运行 (? 'B' : 'C';)
假设第一个运行的结果是 $ret 那么$ret的值为A;
那么第二个可以写成
$ret?'B':'C';
因$ret的值为A,是真值,所以结果是B。
④ PHP函数比字串优先级高吗
functionmyfunc($argument){
echo$argument+10;
}
$variable=10;
echo"myfunc($variable)=".myfunc($variable);
//相当于
myfunc($variable);//就是直接的函数调用
echo"myfunc($variable)=";
functiontest(){}//没有返回值就等于空字符
echo"myfunc($variable)=".test();
⑤ 关于php运算符优先级问题
下表按照优先级从高到低列出了运算符。同一行中的运算符具有相同优先级,此时它们的结合方向决定求值顺序。
运算符优先级
结合方向
运算符
附加信息
无 clone new clone 和 new
左 [ array()
右 ++ -- ~ (int) (float) (string) (array) (object) (bool) @ 类型和递增/递减
无 instanceof 类型
右 ! 逻辑运算符
左 * / % 算术运算符
左 + - . 算术运算符和字符串运算符
左 << >> 位运算符
无 == != === !== <> 比较运算符
左 & 位运算符和引用
左 ^ 位运算符
左 | 位运算符
左 && 逻辑运算符
左 || 逻辑运算符
左 ? : 三元运算符
右 = += -= *= /= .= %= &= |= ^= <<= >>= => 赋值运算符
左 and 逻辑运算符
左 xor 逻辑运算符
左 or 逻辑运算符
左 , 多处用到
对具有相同优先级的运算符,左结合方向意味着将从左向右求值,右结合方向则反之。对于无结合方向具有相同优先级的运算符,该运算符有可能无法与其自身结合。
⑥ php运算符中,优先级从高到低分别是
优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。
⑦ php 关于运算优先级。if($abc==3 && $bcd=4) 这一句,是先运算过程是怎么样。
首先说明&&的用法,且的意思,当且仅当前后连个语句都为真时,返回true
也就是说,如果第一个条件为假,不进行第二个语句的判断或执行
如果第一个条件为真,则进行第二个语句的判断或执行
更简单的语句,如
<?php
$abc=3;
$abc==3&&$bcd=4
print $bcd;
?>
这个效果是一样的!
在你这个例子里$abc == 3为真,则执行语句 $bcd = 4;将4赋值给变量$bcd
这个if语句块等价于如下语句
if($abc==3&&4)
{
$bcd = 4;
print $bcd;
}
先计算$abc==3,因为==比&&,=优先级都高 因为$abc==3成立所以等价于
if(1&&$bcd=4),先计算$bcd=4也就是赋值,然后将值作为&&的第二个条件,等价于
if(1&&4)这个是明显成立的,执行里面的语句 print $bcd输出4
如果你将$bcd=0则等价于
if(1&&0)这个是不成立的,如果有else则执行else里面的语句
if($abc==3&&$bcd=0)
{
print $bcd;
}
else
{
print $bcd;//在这里将输出0
}
⑧ 请教php新手如何判断同一行代码的运行优先级
echo
"已用空间:".($totalspace-$freespace);
这句是两部分,那个点号是连接符
左边是字符串,右边是一个减法运算
如果不用括号括起来,那么,他就会变成“已用空间”和那个$totalspace连接起来再去减掉$freespace,那这样根本就减不得。加括号,只是为了使后面的运算为一部分,“已用空间”是一部分,这样使用.号连接起来才是正确的。
不是php复杂,而是你想得太复杂!
echo
$totalspace-$freespace;
如果这样,就不用加括号了
⑨ php运算中优先级从高到底
先乘除后加减,括号优先级最高
⑩ PHP运算符优先级
10-3>2 为最高优先级
相当于(10-3>2) ? 0 : true
而后 0 ? 5 : 3
0在计算机中被认为FLASE 因此答案是3
请给分,谢谢~