您的位置:首页 > 编程语言 > PHP开发

PHP 运算符

2015-06-25 20:48 661 查看
【运算符优先级】

[thead]
[/thead]

结合方向运算符附加信息
clone newclone 和 new
[array()
++ -- ~ (int) (float) (string) (array) (object) (bool) @类型和递增/递减
instanceof类型
!逻辑运算符
* / %算术运算符
+ - .算术运算符和字符串运算符
<< >>位运算符
== != === !== <>比较运算符
&位运算符和引用
^位运算符
|位运算符
&&逻辑运算符
||逻辑运算符
? :三元运算符
= += -= *= /= .= %= &= |= ^= <<= >>= =>赋值运算符
and逻辑运算符
xor逻辑运算符
or逻辑运算符
,多处用到
取模运算符 % 的结果和被除数的符号(正负号)相同。即 $a % $b 的结果和 $a 的符号相同。

【位运算符】

[thead]
[/thead]

例子名称结果
$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")。
【比较运算符】

[thead]
[/thead]

例子名称结果
$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。
[thead]
[/thead]

运算数 1 类型运算数 2 类型结果
null 或stringstring
NULL
转换为 "",进行数字或词汇比较
bool 或null任何其它类型转换为 bool,
FALSE
<
TRUE
objectobject内置类可以定义自己的比较,不同类不能比较,相同类和数组同样方式比较属性(PHP 4 中),PHP 5 有其自己的说明
string,resource 或numberstring,resource 或number将字符串和资源转换成数字,按普通数学比较
arrayarray具有较少成员的数组较小,如果运算数 1 中的键不存在于运算数 2 中则数组无法比较,否则挨个值比较(见下例)
object任何其它类型object 总是更大
array任何其它类型array 总是更大
注意三元运算符是个语句,因此其求值不是变量,而是语句的结果。如果想通过引用返回一个变量这点就很重要。在一个通过引用返回的函数中语句 return $var == 42 ? $a : $b; 将不起作用,以后的 PHP 版本会为此发出一条警告。

【递增递减】

[thead]
[/thead]

例子名称效果
++$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)。递增/递减其他字符变量则无效,原字符串没有变化。

【逻辑运算符】

[thead]
[/thead]

例子名称结果
$a and $bAnd(逻辑与)
TRUE
,如果 $a 和
$b 都为
TRUE
$a or $bOr(逻辑或)
TRUE
,如果 $a 或
$b 任一为
TRUE
$a xor $bXor(逻辑异或)
TRUE
,如果 $a 或
$b 任一为
TRUE
,但不同时是。
! $aNot(逻辑非)
TRUE
,如果 $a 不为
TRUE
$a && $bAnd(逻辑与)
TRUE
,如果 $a 和
$b 都为
TRUE
$a || $bOr(逻辑或)
TRUE
,如果 $a 或
$b 任一为
TRUE
【字符串运算符】

有两个字符串(string)运算符。第一个是连接运算符("."),它返回其左右参数连接后的字符串。第二个是连接赋值运算符(".="),它将右边参数附加到左边的参数之后。

【类型运算符】

instanceof 用于确定一个 PHP 变量是否属于某一类 class 的实例,或者使用 instanceof 检查对象不是某个类的实例。然而 instanceof 的使用还有一些陷阱必须了解。在 PHP 5.1.0 之前,如果要检查的类名称不存在,instanceof
会调用 __autoload()。另外,如果该类没有被装载则会产生一个致命错误。可以通过使用动态类引用或用一个包含类名的字符串变量来避开这种问题。

<?php
	// %
	echo (5 % 3)."<br>";     // prints 2
	echo (5 % -3)."<br>";    // prints 2
	echo (-5 % 3)."<br>";    // prints -2
	echo (-5 % -3)."<br>";   // prints -2
	
	// 自增
	$z = 'W';
	for($ix=0; $ix<6; $ix++)
	{
		echo ++$z."<br>";
	}
	
	// 字符串
	$a = "Hello ";
	$b = $a . "World!"."<br>"; 
	
	// 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
?>

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: