PHP基础 运算符 第四天

2012-09-24 00:15:54 0  category: 第一阶段PHP

算术运算符

算术运算符
例子名称         结果
-$a           取反          $a 的负值。
$a + $b加法$a 和 $b 的和。
$a - $b减法$a 和 $b 的差。
$a * $b乘法$a 和 $b 的积。
$a / $b除法$a 除以 $b 的商。
$a % $b取模$a 除以 $b 的余数。



除法运算符总是返回浮点数。只有在下列情况例外:两个操作数都是整数(或字符串转换成的整数)并且正好能整除,这时它返回一个整数。  

  取模运算符的操作数在运算之前都会转换成整数(除去小数部分)。


赋值运算符

基本的赋值运算符是“=”。一开始可能会以为它是“等于”,其实不是的。它实际上意味着把右边表达式的值赋给左边的运算数。  

赋值运算表达式的值也就是所赋的值。也就是说,“$a = 3”的值是 3。这样就可以做一些小技巧:


<?php
$a = ($b = 4) + 5; // $a 现在成了 9,而 $b 成了 4。
?>


位运算符

位运算符允许对整型数中指定的位进行置位。如果左右参数都是字符串,则位运算符将操作字符的    ASCII 值。


位运算符
例子名称结果
$a & $bAnd(按位与)将把 $a 和 $b 中都为 1 的位设为 1。
$a | $bOr(按位或)将把 $a 或者 $b 中为 1 的位设为 1。
$a ^ $bXor(按位异或)将把 $a 和 $b 中不同的位设为 1。
~ $aNot(按位非)将 $a 中为 0 的位设为 1,反之亦然。
$a << $bShift left(左移)将 $a 中的位向左移动 $b 次(每一次移动都表示“乘以 2”)。
$a >> $bShift right(右移)将 $a 中的位向右移动 $b 次(每一次移动都表示“除以 2”)。



比较运算符

比较运算符,如同它们名称所暗示的,允许对两个值进行比较。



比较运算符
例子名称结果
$a == $b等于TRUE,如果 $a 等于 $b。
$a === $b全等TRUE,如果 $a 等于 $b,并且它们的类型也相同。(PHP 4 引进)
$a != $b不等TRUE,如果 $a 不等于 $b。
$a <> $b不等TRUE,如果 $a 不等于 $b。
$a !== $b非全等TRUE,如果 $a 不等于 $b,或者它们的类型不同。(PHP 4 引进)
$a < $b小与TRUE,如果 $a 严格小于 $b。
$a > $b大于TRUE,如果 $a 严格 $b。
$a <= $b小于等于TRUE,如果 $a 小于或者等于 $b。
$a >= $b大于等于TRUE,如果 $a 大于或者等于 $b。


如果比较一个整数和字符串,则字符串会被转换为整数。如果比较两个数字字符串,则作为整数比较。此规则也适用于    switch 语句。


比较多种类型
运算数 1 类型运算数 1 类型结果
nullstringstringNULL 转换为 "",进行数字或词汇比较
boolnull任何其它类型转换为 boolFALSE < TRUE
objectobject内置类可以定义自己的比较,不同类不能比较,相同类和数组同样方式比较属性(PHP        4 中),PHP 5 有其自己的说明
stringresourcenumberstringresourcenumber将字符串和资源转换成数字,按普通数学比较
arrayarray具有较少成员的数组较小,如果运算数 1 中的键不存在于运算数        2 中则数组无法比较,否则挨个值比较(见下例)      
array任何其它类型array 总是更大
object任何其它类型object 总是更大


三元运算符

另一个条件运算符是“?:”(或三元)运算符 。


表达式 (expr1) ? (expr2) : (expr3) 在     expr1 求值为 TRUE时的值为 expr2,在     expr1 求值为 FALSE 时的值为     expr3


Note:      注意三元运算符是个语句,因此其求值不是变量,而是语句的结果。如果想通过引用返回一个变量这点就很重要。在一个通过引用返回的函数中语句      return $var == 42 ? $a : $b; 将不起作用,以后的 PHP      版本会为此发出一条警告。    


Note:      

建议避免将三元运算符堆积在一起使用。当在一条语句中使用多个三元运算符时会造成      PHP 运算结果不清晰



错误控制运算符

PHP 支持一个错误控制运算符:@。当将其放置在一个 PHP    表达式之前,该表达式可能产生的任何错误信息都被忽略掉。



执行运算符

PHP 支持一个执行运算符:反引号(``)。注意这不是单引号!PHP 将尝试将反引号中的内容作为外壳命令来执行,并将其输出信息返回(例如,可以赋给一个变量而不是简单地丢弃到标准输出)。使用反引号运算符“`”的效果与函数 shell_exec() 相同。


Note:    

反引号运算符在激活了安全模式或者关闭了 shell_exec() 时是无效的。



递增/递减运算符

PHP 支持 C 风格的前/后递增与递减运算符。  

Note:     递增/递减运算符不影响布尔值。递减     NULL 值也没有效果,但是递增 NULL 的结果是 1


递增/递减运算符
例子    名称效果
++$a前加       $a 的值加一,然后返回 $a。
$a++后加返回 $a,然后将 $a 的值加一。
--$a前减$a 的值减一, 然后返回 $a。
$a--后减返回 $a,然后将 $a 的值减一。


逻辑运算符


逻辑运算符
例子名称结果
$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



<?php

// 下面的 foo() 不会被调用,因为它们被运算符“短路”了。
$a = (false && foo());
$b = (true || foo());
$c = (false and foo());
$d = (true or foo());

// "||" 的优先级比 "or" 高
$e = false || true; // $e 被赋值为 (false || true),结果为 true
$f = false or true; // $f 被赋值为 false [Altair注:"=" 的优先级比 "or" 高]
var_dump($e, $f);

// "&&" 的优先级比 "and" 高
$g = true && false; // $g 被赋值为 (true && false),结果为 false
$h = true and false; // $h 被赋值为 true [Altair注:"=" 的优先级比 "and" 高]
var_dump($g, $h);
?>


字符串运算符

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


<?php
$a = "Hello ";
$b = $a . "World!";

$a = "Hello ";
$a .= "World!"; // $a = $a . "world!"
?>


数组运算符

数组运算符
例子名称结果
$a + $b联合$a 和 $b 的联合。
$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


+ 运算符把右边的数组元素(除去键值与左边的数组元素相同的那些元素)附加到左边的数组后面,但是重复的键值不会被覆盖。  



类型运算符

instanceof 用于确定一个 PHP 变量是否属于某一类     class 的实例: