复习PHP-语言参考-运算符

1.运算符的优先级

请参照这个表

http://www.php.net/manual/zh/language.operators.precedence.php

例1:

$a = $b+=3; 事实发生的顺序为

$a = ($b+=3);

++$a + $a++; 事实发生的顺序为

(++$a) + ($a++); 前一个++$a将会影响到后面的$a++中的$a的值。

最好使用括号,让人易懂。

例2.  !$a = foo()

!的优先级比=高 ,但两者结合的顺序都是从右往左 所以这个表达式的执行顺序为!($a=foo())

谁会扯蛋这么写? 除了让人看着头晕以外,没有其他任何作用了。

2.算术运算符

注意:除法几乎总是返回浮点数(除非两个数都为整数且能整除才返回INT)

注意:取模(或称取余)时,浮点数会被忽略小数,转为整数计算。 如:5.5%3=2

注意:取模(或称取余)时,余数的符号与前者相同

-5%3 = �C2,5%-3=2

3.赋值运算符

基本的赋值运算符就是=

注意:PHP5中$x = object 默认是引用object,修改$x 会同时修改object里的内容,所以如果需要完全COPY的话 用clone

直接引用赋值 $a = &$b;

注意:new返回的是一个引用 所以$a = &new x;会报错。

但 new 引用赋值给$a后  $b = &$a;是不会报错的,因为这时$a是new x引用表示的字符串,而非new x。

4.位运算符

& 与 00得0,10得0,11得1。(同时为1才为1,否则都为0)

| 或 00得0,10得1,11得1。(同时为0才为0,否则都为1)

^ 异或 00得0,10得1,11得0。(两边相等则为0,否则都为1)

~ 取反 (就是转换为二进制后,全部反转,0变1,1变0)

<< 左移 将对象二进制后左移X位,左边丢,右边补0

>> 右移 将对象二进制后右移X位,左边补(正数补0,负数补1),右边丢

(C++里还有>>>叫无符号右移,即左边无论正负都补0,右边丢)

注意:由于==的优先级比&高,所以$a&$b==true 的事实发生顺序为$a&($b==true),所以如果要让前面先运算则需加上括号($a&$b) == true;

注意:不要在32位系统下右移超过32位,也不要在结果可能超过32位的情况下左移,可用GMP移动。

例:一个蛋疼的判断奇偶的办法

<?php    
/**    
* 判断一个数是奇数还是偶数    
* 思路为:    
* 奇数的话,他右移一位得到的结果永远是1    
* 而偶数右移一位得到的结果永远是0    
* */    
$a = 7; //101    
$b = $a>>1; //10    
$c = $b<<1; //100    
echo $c^$a; //100 ^ 101 得到001 判断出来了 ^ 相同的为0,不同才为1    
?>

如何将位移出来的位保存下来,可以用&上移出来的位,需要用到的函数为base_convert

5.比较运算符

注意:switch是==比较

注意:浮点由于实际值的不准确,所以不应相比较。(可是没办法啊)

三元运算在5.3后可以这么写 expr1?:expr3; expr1为真返回expr1否则返回expr3

6.错误运算符

符号为@,最好和 or die结合使用。

如果激活了ini的track_errors 则错误会被存放在$php_errormsg中。

set_error_handler可以自定义错误处理函数(不深究了)

7.执行运算符

符号为反引号``,功能与shell_exec相同

这个挺好的,比如linux的ls win的dir 直接显示目录里的文件

8.递增递减运算符

这个没啥说的 注意符号在变量前后的区别

9.逻辑运算符

and 和&&差不多 但注意优先级

or 和||差不多

xor a和b任何一个为真就为真,但两者同时为真或假都为假

! 反着来

&& 并且

|| 或者

10.字符串运算符

. 连接符 .= 合并

11.数组运算

+  合并两个数组(如果有相同的键名,左边覆盖右边)

== 判断两个数组键和值是否相等,顺序可以不一样

=== 全等就不说了

!= 和==相反

<> 和!=差不多

!== 不全等(和===相反)

12.类型运算符

instanceof  判断变量是否是一个对象的实例(引不引用都一样)

$a=new myclass;

echo $a instanceof myclass;(也支持字符串判断 $a instanceof “myclass”)

还可以判断是否是接口的实例

instanceof和 is_a功能一模一样。

扩展:is_subclass_of(obj,classname) 判断对象是否是该类的子类

注意:仅能判断是否属于对象的一个实例,而不能判断两个对象是否相同。(相同的实例判断应用==或=== 或者转换成array再==)

你可能感兴趣的:(target,title,优先级,blank)