【运算符优先级】
结合方向
运算符
附加信息
无
clone new
clone 和 new
左
[
array()
右
++ -- ~ (int) (float) (string) (array) (object) (bool) @
类型和递增/递减
无
instanceof
类型
右
!
逻辑运算符
左
* / %
算术运算符
左
+ - .
算术运算符和字符串运算符
左
<< >>
位运算符
无
== != === !== <>
比较运算符
左
&
位运算符和引用
左
^
位运算符
左
|
位运算符
左
&&
逻辑运算符
左
||
逻辑运算符
左
? :
三元运算符
右
= += -= *= /= .= %= &= |= ^= <<= >>= =>
赋值运算符
左
and
逻辑运算符
左
xor
逻辑运算符
左
or
逻辑运算符
左
,
多处用到
取模运算符 % 的结果和被除数的符号(正负号)相同。即 $a % $b 的结果和 $a 的符号相同。
【位运算符】
例子
名称
结果
$a & $b
And(按位与)
将把 $a 和 $b 中都为 1 的位设为 1。
$a | $b
Or(按位或)
将把 $a 和 $b 中任何一个为 1 的位设为 1。
$a ^ $b
Xor(按位异或)
将把 $a 和 $b 中一个为 1 另一个为 0 的位设为 1。
~ $a
Not(按位取反)
将 $a 中为 0 的位设为 1,反之亦然。
$a << $b
Shift left(左移)
将 $a 中的位向左移动 $b 次(每一次移动都表示"乘以 2")。
$a >> $b
Shift right(右移)
将 $a 中的位向右移动 $b 次(每一次移动都表示"除以 2")。
【比较运算符】
例子
名称
结果
$a == $b
等于
TRUE,如果类型转换后 $a 等于 $b。
$a === $b
全等
TRUE,如果 $a 等于 $b,并且它们的类型也相同。
$a != $b
不等
TRUE,如果类型转换后 $a 不等于 $b。
$a <> $b
不等
TRUE,如果类型转换后 $a 不等于 $b。
$a !== $b
不全等
TRUE,如果 $a 不等于 $b,或者它们的类型不同。
$a < $b
小与
TRUE,如果 $a 严格小于 $b。
$a > $b
大于
TRUE,如果 $a 严格大于 $b。
$a <= $b
小于等于
TRUE,如果 $a 小于或者等于 $b。
$a >= $b
大于等于
TRUE,如果 $a 大于或者等于 $b。
运算数 1 类型
运算数 2 类型
结果
null 或string
string
将 NULL 转换为 "",进行数字或词汇比较
bool 或null
任何其它类型
转换为 bool,FALSE
object
object
内置类可以定义自己的比较,不同类不能比较,相同类和数组同样方式比较属性(PHP 4 中),PHP 5 有其自己的说明
string,resource 或number
string,resource 或number
将字符串和资源转换成数字,按普通数学比较
array
array
具有较少成员的数组较小,如果运算数 1 中的键不存在于运算数 2 中则数组无法比较,否则挨个值比较(见下例)
object
任何其它类型
object 总是更大
array
任何其它类型
array 总是更大
注意三元运算符是个语句,因此其求值不是变量,而是语句的结果。如果想通过引用返回一个变量这点就很重要。在一个通过引用返回的函数中语句 return $var == 42 ? $a : $b; 将不起作用,以后的 PHP 版本会为此发出一条警告。
【递增递减】
例子
名称
效果
++$a
前加
$a 的值加一,然后返回 $a。
$a++
后加
返回 $a,然后将 $a 的值加一。
--$a
前减
$a 的值减一, 然后返回 $a。
$a--
后减
返回 $a,然后将 $a 的值减一。
递增/递减运算符不影响布尔值。递减 NULL 值也没有效果,但是递增 NULL 的结果是 1。 在处理字符变量的算数运算时,PHP 沿袭了 Perl 的习惯,而非 C 的。例如,在 Perl 中$a = 'Z'; $a++; 将把 $a 变成'AA',而在 C 中,a = 'Z'; a++; 将把 a 变成 '['('Z' 的 ASCII 值是 90,'[' 的 ASCII 值是 91)。注意字符变量只能递增,不能递减,并且只支持纯字母(a-z 和 A-Z)。递增/递减其他字符变量则无效,原字符串没有变化。
【逻辑运算符】
例子
名称
结果
$a and $b
And(逻辑与)
TRUE,如果 $a 和 $b 都为 TRUE。
$a or $b
Or(逻辑或)
TRUE,如果 $a 或 $b 任一为 TRUE。
$a xor $b
Xor(逻辑异或)
TRUE,如果 $a 或 $b 任一为 TRUE,但不同时是。
! $a
Not(逻辑非)
TRUE,如果 $a 不为 TRUE。
$a && $b
And(逻辑与)
TRUE,如果 $a 和 $b 都为 TRUE。
$a || $b
Or(逻辑或)
TRUE,如果 $a 或 $b 任一为 TRUE。
【字符串运算符】
有两个字符串(string)运算符。第一个是连接运算符("."),它返回其左右参数连接后的字符串。第二个是连接赋值运算符(".="),它将右边参数附加到左边的参数之后。
【类型运算符】
instanceof 用于确定一个 PHP 变量是否属于某一类 class 的实例,或者使用 instanceof 检查对象不是某个类的实例。然而 instanceof 的使用还有一些陷阱必须了解。在 PHP 5.1.0 之前,如果要检查的类名称不存在,instanceof 会调用 __autoload()。另外,如果该类没有被装载则会产生一个致命错误。可以通过使用动态类引用或用一个包含类名的字符串变量来避开这种问题。
// %
echo (5 % 3)."
"; // prints 2
echo (5 % -3)."
"; // prints 2
echo (-5 % 3)."
"; // prints -2
echo (-5 % -3)."
"; // prints -2
// 自增
$z = 'W';
for($ix=0; $ix<6; $ix++)
{
echo ++$z."
";
}
// 字符串
$a = "Hello ";
$b = $a . "World!"."
";
// instanceof
class MyClass
{
}
class MyClass2 extends MyClass
{
}
$cVal = new MyClass2();
$d = 'NotMyClass';
var_dump($cVal instanceof MyClass2);
var_dump($cVal instanceof MyClass);
//var_dump($cVal instanceof stdClass);
var_dump($cVal instanceof $d); // no fatal error here
?>