总结了一部分面试题,比较容易混的资料 ,今天整理了下
foo()和@foo()的区别是什么
错误控制符@
当放到php表达式之前,该表达式可能产生的任何错误信息都被忽略掉
php所有的运算符考点
运算符的优先级
递增/递减 > ! > 算数运算符 > 大小比较运算符 > (不)相等比较 > 引用 > 位运算符(^)> 位运算符(|)> 逻辑与 > 逻辑或 > 三目 > 赋值 > and > xor > or
注意:true null 0
递增/递减 运算符不影响布尔值
false-- false
false++ false
递减NULL值没有效果
递增NULL值为1
NULL-- NULL
NULL++ 1
TRUE++ 还是1
0++ 是1
1 递增/递减运算符
<?php
$x=10;
echo ++$x; // 输出 11
$y=10;
echo $y++; // 输出 10
$z=5;
echo --$z; // 输出 4
$i=5;
echo $i--; // 输出 5
?>
2 算数运算符
$x=10;
$y=6;
echo ($x + $y); // 输出 16
echo ($x - $y); // 输出 4
echo ($x * $y); // 输出 60
echo ($x / $y); // 输出 1.6666666666667
echo ($x % $y); // 输出 4
3 比较运算符
$x=100;
$y="100";
var_dump($x == $y);
echo "<br>";
var_dump($x === $y);
echo "<br>";
var_dump($x != $y);
echo "<br>";
var_dump($x !== $y);
echo "<br>";
$a=50;
$b=90;
var_dump($a > $b);
echo "<br>";
var_dump($a < $b);
4 逻辑与
$a && $b
5 逻辑或
$a || $b
$x=10;
echo $x; // 输出 10
$y=20;
$y += 100;
echo $y; // 输出 120
$z=50;
$z -= 25;
echo $z; // 输出 25
$i=5;
$i *= 6;
echo $i; // 输出 30
$j=10;
$j /= 5;
echo $j; // 输出 2
$k=15;
$k %= 4;
echo $k; // 输出 3
括号的使用,可以增加代码的可读性
递增和递减在前就先运算后返回,反之就先返回,后运算
逻辑运算符
短路作用
$a = true || $b == 3 ------ 逻辑或有一个为true就短路,后面不执行,$b就没有赋值
|| 和 && 与 or 和 and的
优先级
不同
$a = false || true ------ $a = true 逻辑或优先级大于赋值预算符,先执行 false || true
$b = false or true ------ 赋值运算符优先级高于or,先执行$b = false,则$b的值为false,整体为true
1 真题
$a = 0;
$b = 0;
if($a = 3 > 0 || $b = 3 > 0){
$a ++;
$b ++;
echo $a;
echo $b;
}
分析
大小比较运算符>逻辑或>赋值预算符
3>0是true,逻辑或有一个为true,结束,后面不执行,$b还是0,整体为true,
$a = true, true++ 还是true,最后$a++ = 1,$b++ = 1
2
$a = 0;
$b = 0;
if($a = 3 && $b = 3 ){
$a++;
$b++;
}
echo $a; //1
echo $b; //4
逻辑与优先级大于赋值运算符,$a =
(
3 && $b = 3
)
都为真,$b为3,但是整体为true,$a = true,true++为1,$b为4
3
$a = 0;
$b = 0;
if($a = 3 || $b = 3 ){
$a++;
$b++;
}
echo $a; //1
echo $b; //1
逻辑或优先级大于赋值运算符,$a = (3 || $b = 3)逻辑或有一个为真,就会短路,后面不执行,$b还是0,0++为1,而
(3 || $b = 3)为true,$a为true,true++为1
$a = 10;
echo $a++; //10 只是返回,没有加一的变量
$a = 10;
$a++;
echo $a; //11 返回之后去加一