PHP运算符优先级

运算符优先级指定了两个表达式绑定得有多“紧密”。例如,表达式 1 + 5 * 3 的结果是 16 而不是 18 是因为乘号(*)的优先级比加号(+)高。必要时可以用括号来强制改变优先级。例如:(1 + 5) * 3 的值为 18

如果运算符优先级相同,那运算符的结合方向决定了该如何运算。例如,"-"是左联的,那么 1 - 2 - 3 就等同于 (1 - 2) - 3 并且结果是 -4. 另外一方面,"="是右联的,所以 $a = $b = $c 等同于 $a = ($b = $c)。

没有结合的相同优先级的运算符不能连在一起使用,例如 1 < 2 > 1 在PHP是不合法的。但另外一方面表达式 1 <= 1 == 1 是合法的, 因为 == 的优先级低于 <=

下表是php手册所给的运算符优先级:

总结常用的运算符优先级如下:

递增/递减 > ! > 算术运算符 > 大小比较 > (不)相等比较 > 引用 > 位运算符(^) > 位运算符(|) > 逻辑与 > 逻辑或 > 三目 > 赋值 > and > xor > or

比较运算符

== 和 ===的区别:

==:比较值是否相等;

===:比较值与类型是否都相等;

注意false的七种情况,都是等值的

递增/递减运算符

  • 递增/递减运算符不影响布尔值

    ture++ 还是 ture,false++也还是false
  • 递减NULL没有效果
  • 递增NULL值为1
  • 递增/递减在前就先运算再返回,在后就先返回再运算

    ++$a:先执行递增再返回递增后的值;

    $a++:先返回值再执行递增;

逻辑运算符

  • 短路作用

    $a = true || $b == 3;// || 后面的表达式被短路,不会执行

    $a = false && $b == 3;// && 后面的表达式被短路,不会执行
  • ||、&& 和 or、and 的优先级是不一样的

    $a = false || true; //"||"优先级大于"=",$a 的值是 true

    $a = false or true; // "or"优先级小于"=",$a 的值是 false

解题方法

重点记忆递增/递减运算符的运算规则,逻辑运算符的短路效果,在看到逻辑运算符时要多考虑优先级的问题。

真题

<?php
$a = 0;
$b = 0; if ($a = 3 > 0 || $b = 3 > 0) {
$a++;
$b++;
echo $a . "\n";
echo $b . "\n";
}

思路:

/**
* if里面有 = > || 三个运算符,根据运算符优先级, ">" > "||" > "="
* 所以首先执行的是 3 > 0 ,然后执行 || ,3>0 为true,则|| 后面被短路 ,不被执行
* 所以$a = true ,$b = 0
* 进入if之后,$a++ ,$a还是true,$b++ ,$b = 1
* 因此最后的结果是 1 1(echo true,打印的是1)
*/

PHP运算符考察点的更多相关文章

  1. php面试专题---3、运算符考察点

    php面试专题---3.运算符考察点 一.总结 一句话总结: 逻辑运算符注意短路效果,优先级问题直接用括号,还要注意 ||和&&与or和and的优先级不同 1.foo()和@foo() ...

  2. PHP面试(一):PHP基础知识考察点、网页考察点、Linux考察点、MySQL考察点

    一.基础知识考察 1.引用变量的概念及定义方式——引用变量的原理 2.常量及数据类型——字符串的三种定义方法及各自的区别 3.运算符的使用——错误控制符.运算符优先级 4.流程控制操作 5.自定义函数 ...

  3. (一)PHP基础知识考察点

    1,PHP引用变量的考察点: 概念:引用就是用不同的名字访问同一个变量内容. 定义方式: 使用&符号. PHP引用变量的工作原理 这里有个COW  copy on write  用zval() ...

  4. shell运算符

    原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用. expr 是一款表达式计算工具,使用它能完成表达式的求值操作. #!/bin/bash v ...

  5. SQL Server-聚焦APPLY运算符(二十七)

    前言 其实有些新的特性在SQL Server早就已经出现过,但是若非系统的去学习数据库你会发现在实际项目中别人的SQL其实是比较复杂的,其实利用新的SQL Server语法会更加方便和简洁,从本节开始 ...

  6. java中的移位运算符:<<,>>,>>>总结

    java中有三种移位运算符 <<      :     左移运算符,num << 1,相当于num乘以2 >>      :     右移运算符,num >& ...

  7. 我的MYSQL学习心得(五) 运算符

    我的MYSQL学习心得(五) 运算符 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...

  8. .NET 基础 一步步 一幕幕[运算符、占位符、转义符]

      运算符.占位符.转义符 好吧,在五局全胜之后,终于升到了三个钻,距离一个星星还有一大段距离,忽然想起来今天的博客还没写,果断坑队友,来写博客了....感觉以后还是每天更新一篇比较好.要不晚上就该熬 ...

  9. ECMASCript2015 提案 stage-3的对象展开运算符

    看源码时看到如下的代码 export default { //通过mapActions将actions映射到methods里 methods: { ...mapActions([ 'updateSta ...

随机推荐

  1. wpa_supplicant - 强有力的终端 wifi 配置工具【转】

    本文转载自:http://rickgray.me/2015/08/03/useful-command-tool-for-wifi-connection.html 最近网购了一套Raspberry-Pi ...

  2. YTU 2892: I--免费看电影

    2892: I--免费看电影 时间限制: 1 Sec  内存限制: 128 MB 提交: 30  解决: 12 题目描述 万象城星美影院开业1周年了,要举行为期一天的大酬宾,ACM队员准备去看电影.已 ...

  3. YTU 2875: 倒霉蛋买饭去

    2875: 倒霉蛋买饭去 时间限制: 1 Sec  内存限制: 128 MB 提交: 22  解决: 17 题目描述 早春星期天的某个早晨,大风呼呼地刮.一个宿舍n个人,谁也不想起床买饭去.他们定了一 ...

  4. TCP 拆、粘包

    Netty(三) 什么是 TCP 拆.粘包?如何解决? 前言 记得前段时间我们生产上的一个网关出现了故障. 这个网关逻辑非常简单,就是接收客户端的请求然后解析报文最后发送短信. 但这个请求并不是常见的 ...

  5. P5068 [Ynoi2015]我回来了

    传送门 解锁成就:ynoi的题目都做到过原题 因为\(n\)很小,我们可以用\(sss[u][i]\)表示到点\(u\)的距离不超过\(i\)的点的集合,这个可以用bitset存,然后先一遍bfs,再 ...

  6. bzoj3118: Orz the MST(线性规划+单纯形法)

    传送门 不难发现,对于每一条树边肯定要减小它的权值,对于每一条非树边要增加它的权值 对于每一条非树边\(j\),他肯定与某些树边构成了一个环,那么它的边权必须大于等于这个环上的所有边 设其中一条边为\ ...

  7. 通过爬虫爬取四川省公共资源交易平台上最近的招标信息 --- URLConnection

    通过爬虫爬取公共资源交易平台(四川省)最近的招标信息 一:引入JSON的相关的依赖 <dependency>       <groupId>net.sf.json-lib< ...

  8. VS2019 字符串对指针char*赋值编译器报错原因及解决方法

    2019-05-26   21:55:08 前几天在敲代码时,将字符串“Hellow world!”赋值给指针char*类型指针时编译器报错的问题 网上搜索后发现 char*是历史遗留问题,如果程序修 ...

  9. centos 7 添加普通用户

    adduser username username 是你要创建的用户名 passwd username 创建密码,输入个稍微复杂的 usermod -a -G wheel username 将用户加入 ...

  10. htm 与 html 的区别

    htm 与 html 的区别 前者是超文本标记(Hypertext Markup) 后者是超文本标记语言(Hypertext Markup Language) 可以说 htm = html 同时,这两 ...