PHP运算符考察点
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运算符考察点的更多相关文章
- php面试专题---3、运算符考察点
php面试专题---3.运算符考察点 一.总结 一句话总结: 逻辑运算符注意短路效果,优先级问题直接用括号,还要注意 ||和&&与or和and的优先级不同 1.foo()和@foo() ...
- PHP面试(一):PHP基础知识考察点、网页考察点、Linux考察点、MySQL考察点
一.基础知识考察 1.引用变量的概念及定义方式——引用变量的原理 2.常量及数据类型——字符串的三种定义方法及各自的区别 3.运算符的使用——错误控制符.运算符优先级 4.流程控制操作 5.自定义函数 ...
- (一)PHP基础知识考察点
1,PHP引用变量的考察点: 概念:引用就是用不同的名字访问同一个变量内容. 定义方式: 使用&符号. PHP引用变量的工作原理 这里有个COW copy on write 用zval() ...
- shell运算符
原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用. expr 是一款表达式计算工具,使用它能完成表达式的求值操作. #!/bin/bash v ...
- SQL Server-聚焦APPLY运算符(二十七)
前言 其实有些新的特性在SQL Server早就已经出现过,但是若非系统的去学习数据库你会发现在实际项目中别人的SQL其实是比较复杂的,其实利用新的SQL Server语法会更加方便和简洁,从本节开始 ...
- java中的移位运算符:<<,>>,>>>总结
java中有三种移位运算符 << : 左移运算符,num << 1,相当于num乘以2 >> : 右移运算符,num >& ...
- 我的MYSQL学习心得(五) 运算符
我的MYSQL学习心得(五) 运算符 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...
- .NET 基础 一步步 一幕幕[运算符、占位符、转义符]
运算符.占位符.转义符 好吧,在五局全胜之后,终于升到了三个钻,距离一个星星还有一大段距离,忽然想起来今天的博客还没写,果断坑队友,来写博客了....感觉以后还是每天更新一篇比较好.要不晚上就该熬 ...
- ECMASCript2015 提案 stage-3的对象展开运算符
看源码时看到如下的代码 export default { //通过mapActions将actions映射到methods里 methods: { ...mapActions([ 'updateSta ...
随机推荐
- wpa_supplicant - 强有力的终端 wifi 配置工具【转】
本文转载自:http://rickgray.me/2015/08/03/useful-command-tool-for-wifi-connection.html 最近网购了一套Raspberry-Pi ...
- YTU 2892: I--免费看电影
2892: I--免费看电影 时间限制: 1 Sec 内存限制: 128 MB 提交: 30 解决: 12 题目描述 万象城星美影院开业1周年了,要举行为期一天的大酬宾,ACM队员准备去看电影.已 ...
- YTU 2875: 倒霉蛋买饭去
2875: 倒霉蛋买饭去 时间限制: 1 Sec 内存限制: 128 MB 提交: 22 解决: 17 题目描述 早春星期天的某个早晨,大风呼呼地刮.一个宿舍n个人,谁也不想起床买饭去.他们定了一 ...
- TCP 拆、粘包
Netty(三) 什么是 TCP 拆.粘包?如何解决? 前言 记得前段时间我们生产上的一个网关出现了故障. 这个网关逻辑非常简单,就是接收客户端的请求然后解析报文最后发送短信. 但这个请求并不是常见的 ...
- P5068 [Ynoi2015]我回来了
传送门 解锁成就:ynoi的题目都做到过原题 因为\(n\)很小,我们可以用\(sss[u][i]\)表示到点\(u\)的距离不超过\(i\)的点的集合,这个可以用bitset存,然后先一遍bfs,再 ...
- bzoj3118: Orz the MST(线性规划+单纯形法)
传送门 不难发现,对于每一条树边肯定要减小它的权值,对于每一条非树边要增加它的权值 对于每一条非树边\(j\),他肯定与某些树边构成了一个环,那么它的边权必须大于等于这个环上的所有边 设其中一条边为\ ...
- 通过爬虫爬取四川省公共资源交易平台上最近的招标信息 --- URLConnection
通过爬虫爬取公共资源交易平台(四川省)最近的招标信息 一:引入JSON的相关的依赖 <dependency> <groupId>net.sf.json-lib< ...
- VS2019 字符串对指针char*赋值编译器报错原因及解决方法
2019-05-26 21:55:08 前几天在敲代码时,将字符串“Hellow world!”赋值给指针char*类型指针时编译器报错的问题 网上搜索后发现 char*是历史遗留问题,如果程序修 ...
- centos 7 添加普通用户
adduser username username 是你要创建的用户名 passwd username 创建密码,输入个稍微复杂的 usermod -a -G wheel username 将用户加入 ...
- htm 与 html 的区别
htm 与 html 的区别 前者是超文本标记(Hypertext Markup) 后者是超文本标记语言(Hypertext Markup Language) 可以说 htm = html 同时,这两 ...