运算符优先级

每种编程语言都有运算符,运算符要学会灵活使用。

运算符拥有不同的优先级和结合方向。

<?php
var_dump(1 <= 1 == 1);  // true
var_dump(true ? 0 : true ? 1 : 2);  // 2
$a = 1;
var_dump(++$a + $a++);  // may print 4 or 5

在需要的时候使用括号,可以增强代码的可读性。

算术运算符

取模运算符的结果和被除数的符号相同。

赋值运算符将原变量的值拷贝到新变量中,有个例外就是碰到对象时,是以引用赋值的,除非明确使用clone关键字来拷贝。

new运算符自动返回一个引用。

位运算符

位移有一下几个规律:

  • 向任何方向移出去的位都被丢弃。
  • 左移时以零填充,且正负号不被保留。
  • 右移时以符号位填充,意味着正负号保留。

这一节的重点就是把手册重点的几个示例程序看懂吧。示例中字符串的XOR运算比较难理解,这个以后再看。还有整数的位移,感觉理解就好吧。

比较运算符

普通等号==只需类型转换后两值相等就返回真。

如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换为数值并且比较按照数值来进行。

<?php
var_dump(0 == "a");  // true
var_dump("1" == "01");  // true
var_dump("10" == "1e1");  // true

自PHP 5.3起,可以省略三元运算符中间那部分。表达式expr1 ?: expr3在expr1真时返回expr1,否则返回expr3。三元运算符是从左往右计算的。

错误控制运算符

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

不能把它放在函数或类的定义之前,也不能用于条件结构例如if和foreach等。

执行运算符

PHP支持一个执行运算符:反引号,就是键盘左上角那个。效果与函数shell_exec()相同。

<?php
$output = `systeminfo`;
$outip = shell_exec('ipconfig');
echo "<pre>$outip</pre>";
echo "<pre>$output</pre>";

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

注意!反引号不能在双引号字符串中使用。

递增递减运算符

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

在处理字符变量的算术运算时,PHP沿袭了Perl的习惯,而非C的。例如,在Perl中$a = 'Z'; $a++;将把$a变成'AA'。

注意!字符变量只能递增,不能递减,并且只支持纯字母(a-z和A-Z)。递增/递减其他字符字符变量则无效,原字符串没有变化。

<?php
$z = 'z';
$Z = 'Z';
var_dump(++$z);  // 'aa'
var_dump(++$Z);  // 'AA'

逻辑运算符

||or的优先级高。&&and的优先级高。

字符串运算符

第一个是连接运算符.,第二个是连接赋值运算符.=

数组运算符

  1. 联合:$a + $b。把右边的数组元素附加到左边的数组后面,两个数组中都有的键名,则只用左边数组中的,有变动额被忽略。

  2. 相等:$a == $b。具有相同的键值对。

  3. 全等:$a === $b。具有相同的键值对,并且顺序和类型都相同。

  4. 不等:$a != $b$a <> $b

  5. 不全等:$a !== $b

数组中的单元如果具有相同的键名和值则比较时相等,不要在意顺序和类型。

<?php
$a = array("apple", "banana");
$b = array(1 => "banana", "0" => "apple");
var_dump($a);
var_dump($b);
var_dump($a == $b);
var_dump($a === $b);

输出结果如下所示。

array (size=2)0 => string 'apple' (length=5)1 => string 'banana' (length=6)array (size=2)1 => string 'banana' (length=6)0 => string 'apple' (length=5)boolean trueboolean false

类型运算符

PHP中有一个类型运算符instanceof,用于确定一个PHP变量是否属于某一类的实例。

<?php
class MyParent {}
class MyClass extends MyParent {}
class NotMyClass {}
interface MyInterface {}
class InClass implements MyInterface {}
$a = new MyClass;
var_dump($a instanceof MyClass);  // true
var_dump($a instanceof NotMyClass);  // false
var_dump($a instanceof MyParent);  // true
$b = new InClass;
var_dump($b instanceof MyInterface);  // true
$c = 'InClass';
var_dump($b instanceof $c);  // true
var_dump($c instanceof stdClass);  // false

注意,instanceof不允许用来检测常量。

(全文完)

转载于:https://www.cnblogs.com/sintune/p/php-operators.html

运算符 - PHP手册笔记相关推荐

  1. 类与对象 - PHP手册笔记

    原文:类与对象 - PHP手册笔记 基本概念 PHP对待对象的方式与引用和句柄相同,即每个变量都持有对象的引用,而不是整个对象的拷贝. 当创建新对象时,该对象总是被赋值,除非该对象定义了构造函数并且在 ...

  2. 常量 - PHP手册笔记

    原文:常量 - PHP手册笔记 常量语法 常量在脚本执行期间其值不能改变.常量大小写敏感,传统上常量标识符总是大写.常量一旦定义就不能被重新定义或取消定义,常量的值只能是标量. 可以用define() ...

  3. 预定义变量 - PHP手册笔记

    原文:预定义变量 - PHP手册笔记 预定义变量将所有的外部变量表示成内建环境变量,并且将错误信息表示成返回头.超全局变量是在全部作用域中始终可用的内置变量.在函数或方法中无需执行global $va ...

  4. 流程控制 - PHP手册笔记

    流程控制 - PHP手册笔记 原文:流程控制 - PHP手册笔记 脚本由语句构成,语句靠流程控制实现功能,这一节主要介绍了几个关键字的使用. elseif elseif和else if的行为完全一样, ...

  5. 预定义异常 - PHP手册笔记

    原文:预定义异常 - PHP手册笔记 Exception是所有异常的基类,类摘要如下: <?php class Exception {protected string $message; // ...

  6. 码出高效:Java开发手册笔记(线程池及其源码)

    码出高效:Java开发手册笔记(线程池及其源码) 码出高效:Java开发手册笔记(线程池及其源码) 码出高效:Java开发手册笔记(线程池及其源码) 前言 一.线程池的作用 线程的生命周期 二.线程池 ...

  7. CCNA精品学习资料汇总(学习手册+笔记+题库)

       CCNA精品学习资料汇总(学习手册+笔记+题库) CCNA认证标志着具备安装.配置.运行中型路由和交换网络,并进行故障排除的能力.获得CCNA认证的专业人士拥有相应的知识和技能,能够通过广域网与 ...

  8. 语句与语法笔记:学会python中_doc_和pydoc——python学习手册笔记之3

    标题## 语句与语法:学会python中的_doc_和pydoc--python学习手册笔记之3 光看书不练习很难学好python,光看书不做点学习笔记,恐怕连书本的东西也是半知半解,不知所云.这手册 ...

  9. 阿里巴巴开发手册笔记-----数据库篇

    阿里巴巴开发手册笔记 阿里开发团队发表的java开发规范,下面我在学习了之后做一个简单的总结.此篇为数据库篇. 数据库 (一)建表约定 1.表达是与否的概念的字段,必须使用is_xxx的方式来命名.数 ...

最新文章

  1. google浏览器javascript没反应_浏览器之导航这件小事
  2. 三菱880彩铅和uni的区别_彩铅测评|150色荷尔拜因彩铅初体验
  3. HR,是该做一个Excel仪表盘了!
  4. 联想网络同传系统用户手册(联想EDU应用用户手册)[联想硬盘保护,联想网络控制工具]
  5. 读书笔记——《解析卷积神经网络 ——深度学习实践手册(魏秀参)》
  6. python tk/ttk制作 安卓群控助手,多台设备多任务多线程执行
  7. 调用支付jsapi缺少参数appid
  8. 服务器配置高点网站打开速度,网站打开速度慢,你必须要解决的事?
  9. 基线、底线、顶线、中线
  10. 想做IT行业项目管理,面向客户方向的,考ITIL和PMP哪个更好一些?
  11. Idea的全局搜索快捷键
  12. 【数学】树的重心的性质及其证明
  13. 打印机在计算机里被删掉,打印机显示正在删除怎么办 打印机显示正在删除解决办法...
  14. writeup 攻防世界 Decrypt-the-Message
  15. 计算机网络安全-----防火墙
  16. 2021-09-24 网安实验-图像隐写-StegSolve之Frame Browser
  17. Cross-validation and KNN
  18. UG旋钮盖模具设计与加工
  19. 传统游戏与ar游戏的对比_传统游戏的AI
  20. 洛克菲勒的38封信pdf下载_(完整word版)洛克菲勒留给儿子的38封信

热门文章

  1. 用python播放音乐_Python实例讲解 -- 定时播放 (闹钟+音乐)
  2. 读书笔记-大型网站技术架构(核心原理与案例分析)
  3. Nodejs开发微信公众号中控服务
  4. 重点 (七) : 开发技巧/方法
  5. Linux下使用OTL操作mysql数据库
  6. matlab 图片批量读取
  7. php session函数
  8. Spring.net抛砖引玉系列(二)用接口来实现HelloWorld
  9. 解决安卓SDK更新dl-ssl.google.com无法连接的方法
  10. 安装完Hadoop之后,命令行输入hadoop或hdfs却找不到命令的解决方法