PHPer 高手之路
  • Introduction
  • First Chapter
  • 基础
    • 数据类型和常量
    • 字符串
      • 字符编码
      • 字符编码相关编程
    • 引用变量
    • 运算符与错误控制符@
    • 流程控制与条件判断
      • foreach遍历中的引用
    • 函数
    • 文件及目录处理
  • PHP 数组
    • 基础
    • PHP数组操作
    • 输入流 php://input
    • PHP数组的内部实现
    • PHP数组和数据结构
    • 示例技巧
  • PHP文件编程
    • 文件系统
    • 基础
    • 实例技巧
    • PHP中XML处理
    • PHP中JSON处理
    • PHP中CSV处理
    • 大文件上传
  • 正则表达式
    • 基础
    • 正则的引擎
    • 表达式的优化
    • PHP中正则的使用
  • PHP 编码技巧
    • PHP编码习惯
    • PHP语法糖
    • PHP代码优化
    • PHP重点新特性
    • PHP编码规范
  • PHP选项和运行原理
    • PHP SAPI
    • PHP运行模式及安装方式
    • 附录:进程和线程的Q解
    • Apache下的MPM模式
    • Apache 与 Nginx
    • PHP的运行机制及原理
    • PHP垃圾回收机制
    • PHP配置选项
  • PHP安全
    • 跨站脚本攻击(XSS )
    • 跨站请求伪造(CRSF)
  • PHP 高级特性
    • 异常处理(Exceptions)
    • 代码复用(Trait)
    • 预定义接口(Predefined Interfaces)
    • 魔术方法(Magic Methods)
    • 回调函数、匿名函数&闭包
    • 命名空间(Namespaces)
    • 自动加载(Autoload)
    • 反射(Reflection)
    • 魔术常量(Magic constants)
    • 综合实例
  • 附录:关键词
  • 附录:资料
  • 代码的版本控制
    • SVN
    • Git
      • 疑难杂症
  • Linux
    • Linux原理与基础
    • 常见命令
    • Shell 编程
    • awk 与 sed
    • 命令笔记
  • HTTP 协议
    • 请求方法与返回状态码
    • Cookie、Session 的原理
  • MySQL
    • MySQL表存储引擎
  • 标准PHP库(SPL)
    • 数据结构
      • SplPriorityQueue - 优先队列
      • SplQueue - 队列
      • SplStack - 栈的功能
    • 接口
      • Countable - count统计接口
  • 附录:ElasticSearch
  • PHP数据结构
  • 附录:Rabbitmq
  • 附录:guzzle
  • JavaScript
    • 附录:资料
  • 疑难杂症
Powered by GitBook
On this page
  • 错误控制符@
  • 运算符
  • 拓展

Was this helpful?

  1. 基础

运算符与错误控制符@

Previous引用变量Next流程控制与条件判断

Last updated 5 years ago

Was this helpful?

错误控制符@

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);
官方文档