PHP 支持一个错误控制运算符:@。当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉。
运算符优先级:
- 递增/递减 > ! > 算术运算符 > 大小比较 > (不)相等比较 > 引用 > 位运算符( ^ ) > 位运算符( | ) > 逻辑与 > 逻辑或 > 三目 > 赋值 > and > xor > or
- 递增/递减运算符不影响布尔值
- 递增NULL值为1,递减NULL值没有效果
i++和++i都是分两步完成的。前者是先赋值,然后再运算;后者是先运算,后赋值
<?php
$i =0;
$a = $i++;
echo $a;
$i=0;
$a=$i;
$i=$i+1;
echo $a;
执行运算符
PHP 支持一个执行运算符:反引号(``)。注意这不是单引号!PHP 将尝试将反引号中的内容作为 shell 命令来执行,并将其输出信息返回
<?php
$output = `ls -al`;
echo "<pre>$output</pre>";
反引号运算符在激活了安全模式或者关闭了 shell_exec() 时是无效的。
x<=>y 组合比较符 此为PHP7新增运算符
如果 x 的值和 y 的值相等(不是恒等于),就返回 0;如果 x 的值大于 y 的值,就返回 1;如果 x 的值小于 y 的值,就返回 -1。
取模运算符 % 的结果和被除数的符号(正负号)相同。即 $a % $b 的结果和 $a 的符号相同
<?php
echo (5 % 3)."\n"; // prints 2
echo (5 % -3)."\n"; // prints 2
echo (-5 % 3)."\n"; // prints -2
echo (-5 % -3)."\n"; // prints -2
=== !== 字符串判断值和数据类型是否相等。
===如果是数组类型:具有相同的键/值对并且顺序和类型都相同则为 TRUE。
当使用比较运算符(==)比较两个对象变量时,比较的原则是:如果两个对象的属性和属性值 都相等,而且两个对象是同一个类的实例,那么这两个对象变量相等。
而如果使用全等运算符(===),这两个对象变量一定要指向某个类的同一个实例(即同一个对象)。
<?php
$a =null;
$a++;
echo $a;
var_dump('1'===$a);
$a = array("apple", "banana");
$b = array(1 => "banana", "0" => "apple");
var_dump($a == $b); // bool(true)
var_dump($a === $b); // bool(false)
逻辑运算符短路效应
or、||、and、&& 都是短路运算符
&&(and)短路与运算符检查第一个表达式是否返回“flase”,如果是“false”则结束语句并返回“false”,否则检查第二个表达式。
|| (or)短路或运算符检查第一个表达式是否返回“true”,如果是“true”则结束语句并返回“true”,否则检查第二个表达式。
defined('HOST') || define('HOST', 'http://' . $_SERVER['HTTP_HOST']);
解释:如果还没有定义常量HOST的时候才执行||后的define语句,如果之前有定义过不执行后面的define的定义操作。
|和&是位运算,运算结果是二进制数。
3|9 = 0011(二进制)| 1001(二进制) = 1011(二进制) = 11(十进制)