复习PHP-语言参考-运算符
admin
2023-07-03 14:05:00
0

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 = –2,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移动。

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

/**    
* 判断一个数是奇数还是偶数    
* 思路为:    
* 奇数的话,他右移一位得到的结果永远是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再==)

相关内容

热门资讯

易事达取得载带冷却定型装置专利... 国家知识产权局信息显示,浙江易事达电子材料有限公司取得一项名为“一种载带冷却定型装置”的专利,授权公...
深度推荐:2026年五大精选手... 本文全面梳理2026年手机电池批发市场主流品牌,聚焦续航升级与库存优化两大核心需求。通过对五大头部品...
法国外长要求安理会就以色列在黎... △法国外长巴罗(资料图)当地时间5月31日,法国外长巴罗宣布,他已要求召开一次联合国安全理事会紧急会...
大数据赋能矿山安全 科技先锋刘... 在煤炭产业高质量发展与智慧矿山建设加速推进的背景下,矿山安全监管正从传统人工巡查向数字化、智能化、预...
解压玩具“娜塔莎”引争议,它的... 最近,一款名为“娜塔莎”的婴儿造型“捏捏乐”解压玩具在网络上和校园里悄然流行,商家宣称其可以用来缓解...
坚持“四个面向” 矢志科技报国... 5月30日,第十个全国科技工作者日如期而至。日前,中央宣传部、中国科协向全社会发布“最美科技工作者”...
显微镜的“能源革命” ——无液... 我国自主研制闭循环光耦合SPM系统,为量子科技前沿研究提供可持续的“中国方案”。 导读 Part ...
五部门开展“百场万企”大中小企... 记者从工业和信息化部获悉,工业和信息化部、国家发展改革委、国务院国资委等五部门联合印发通知,组织开展...
22年,一个免费软件的域名之战 奇怪的是,从 2004 年推出以来,Paint.NET一直托管在 getpaint.net网站上,无...
柬埔寨一名中国地产商人被残忍杀... 柬埔寨首都金边一名中国男子,疑遭人绑架、勒索并残忍杀害。其尸体于5月30日上午,在金边市朗哥区一处空...