运算符与错误控制符@
错误控制符@
php支持一个错误运算符:@。当将其放置在一个PHP表达式之前,该表达式可能产生任何错误信息都被忽略掉。不建议使用。
运算符
运算符优先级:
递增/递减>!>算数运算符>大小比较>(不)相等比较>引用>位运算符(^)>逻辑与>逻辑或>三目运算>赋值>and>xor>or
括号的使用可以增加代码可读性
递增/递减运算符不影响布尔值
(也就是递增递减 true 和false)
递减NULL 没有效果
递增NULL值为1
递增和递减在前就先运算符后返回,反之就先返回,后运算。
$a = true;
if($a++) {
echo "true1"; // 执行
}
if($a--) {
echo "true2"; // 执行
}
$b = false;
if($b++){
echo "false1"; // 不执行
}
var_dump($b); // false
if($b--){
echo "false1"; // 不执行
}
var_dump($b); // false
$c = null;
echo --$c;
var_dump($c); // null
echo ++$c; // 输出 1
特别注意短路作用:
当逻辑与时,如果前面为false,则后面不做执行
当逻辑或,如果前面为true,则后面不在做执行
//相等比较 > 逻辑与 && > 逻辑或 || > 赋值
echo $a = true || $b == 3 // true
echo $b = false && $a==1 //false
//逻辑与 && > 逻辑或 || > 赋值 > and > or
echo $a = false || true; // true
echo $b = false or true // true
实例:
下列程序中请写出打印输出的结果:
$a = 0;
$b = 0;
if ($a = 3 > 0 || $b = 3 > 0)
{
$a++;
$b++;
echo $a. "\n";
echo $b. "\n";
}
结果:
boolean true
int 0
1 1
解析:
1.优先级 :比较运算符(>) ||
> 赋值运算
2.按照以上逻辑, 3 > 0 为true,继续查看为逻辑或,逻辑或的原则是i前为true,则逻辑结果即可返回true,后面不在执行
3.因此$a 拿到了逻辑运算后的true,而$b没有执行,仍然为0
4.前面说过对一个boolean类型的值进行递增/递减不会影响布尔值 ,因此
$a的值不发生改变,输出被强制转为1.
$b=0;$b++;则为1
拓展
判断int型变量a是奇数还是偶数:a&1 = 0 偶数 a&1 = 1 奇数
乘法运算转化成位运算:a * (2^n) 等价于 a<< n
除法运算转化成位运算:a / (2^n) 等价于 a>> n
不用temp交换两个整数x ^= y; y ^= x; x ^= y;
二进制位掩码,提供了一种用一个选项表示多项的可能。(参考:error_reporting设置错误级别的方式)
Error_Reporting(E_Error | e_Warning | e_Parse | e_Notice);
error_reporting(E_ALL ^ E_NOTICE);
Last updated
Was this helpful?