PHP三维优先级运算
昨天去某大型公司面试,做了一套面试题,整套面试题的基础要求比较高,对于js的使用有一定的要求。在本次面试中碰到PHP三维运算优先级的问题,先看题:
<?php
$b=20;
$c=40;
$a=$b>$c?($c-$b)?1:($b-$c)>0:($b+$c)?0:$b*$c;
echo $a;
?>
此题要求的三维运算和优先级的结合使用,当时做对了,但是不明白原理。回去以后请教了大神才明白怎么回事,看解题思路:
/*
关于运算优先级,先看文档:http://www.php.net/manual/zh/language.operators.precedence.php
?:是左结合,就是从左向右
*/ //先看个简单的:
//1.想知道??:它是怎样解析的
//$a=true?false?1:0;//报错,语法错误 //2.再试一下这个:
$a=true?false?1:0:2;
echo $a;//0 /*
通过观察以上两个判断,我猜测应该是这样的:
当出现?时,它会在它后面寻找:,如果一直没有找到,则会报错
如果在后面的:前面出现了?,则会先让后面的?与:结合
也就是说true?false? 这种表达,它是不去解析的
true?false?true:false 这种表面,它会选择解析后面的一对?:然后得到结果:false
语句就变成true?false 了,这样语句就不完整了,所以会报错 下面我们想看楼主的问题:
$b=20;
$c=40;
$a=$b>$c?($c-$b)?1:($b-$c)>0:($b+$c)?0:$b*$c;
解析的顺序就应该是这样的:
$a=true? (20?1:-20)>0 : 60 ?0:800;
$a=true?1>0:60?0:800;
$a=true?true:60?0:800;
$a=true?0:800;
$a=0; */
<?php
$b=20;
$c=40;
$a=$b>$c? ($c-$b)?1:($b-$c)>0:($b+$c)?0:$b*$c;
// $b>$c?1:($b+$c)?0:$b*$c
// $b>$c?1:0
// 0
echo $a;
PHP三维优先级运算的更多相关文章
- JS运算的优先级
汇总表 下面的表将所有运算符按照优先级的不同从高到低排列. 优先级 运算类型 关联性 运算符 20 圆括号 n/a ( … ) 19 成员访问 从左到右 … . … 需计算的成员访问 从左到右 … [ ...
- js算数优先级
.fullwidth-table { background: white } .fullwidth-table>th { background: #f50 } 优先级 运算类型 关联性 运算符 ...
- js 运算符优先级
在看jquery源码,仔细看入口函数的时候,有点懵了.看到与或.多重三目,傻傻的分不清,就代码仔细的区分下运算符优先级,以前都是呼呼的飘过.看来任何一个细节都不能忽略,不然效率极低.. !functi ...
- 深入理解CSS选择器优先级的计算
选择器的优先级关系到元素应用哪个样式.在CSS2.1的规范(http://www.w3.org/TR/2009/CR-CSS2-20090908/cascade.html#specificity)中是 ...
- JavaScript快速入门(五)——表达式运算
赋值运算 赋值运算的形式为左值 = 右值.如果同个表达式中有多个赋值运算,则从右到左运算.例如: a = b = c; // 和下面两行等价 b = c; a = b; 另外一种赋值运算的形式叫做复合 ...
- 一道面试题 包含了new的细节 和运算符的优先级 还有属性访问机制
function Foo() { getName = function () { alert(1); } return this; } Foo.getName = function () { aler ...
- JavaScript基础之运算符及全面的运算符优先级总结
算数运算符: 加+,减—,乘*,除/,求余%,加加++,减减——, 加减乘除求余运算与数学上的用法完全一样. 不过,加号+还有连接字符串的作用,其他运算符还可以将字符串数字转换成数值型,参见JavaS ...
- 【javascript基础】运算符优先级
优先级 运算类型 关联性 运算符 1 成员运算符 从左到右 . [] new 从右到左 new 2 函数调用运算符 从左到右 () 3 自增运算符 n/a ++ 自减运算符 n/a -- 4 逻辑非运 ...
- CSS学习之选择器优先级与属性继承
CSS学习之选择器优先级与属性继承 选择器优先级 其实选择器是具有优先级的,我们来看下面这一组案例: <!DOCTYPE html> <html lang="en" ...
随机推荐
- Event(补交作业)
三种方法可以创建Eventhandler 1.
- dotnet core2常用命令
dotnet --info 来查看是否安装成功dotnet new -alldotnet new mvc 创建MVC项目dotnet new more 查看项目类型dotnet restore (恢复 ...
- python常用模块之OS
os模块偏于文件目录管理 <1>.常用方法 工作目录: os.getcwd() 返回当前工作目录 os.chdir(dir) 更改当前工作目录,相当于cd 目录文件操作: os.mkdir ...
- css加载顺序
最近发现个有意思的事情,印象中的是css中class后面会覆盖前面的, 于是写了代码 div{ width: 100px; height: 100px; } .red{ background-colo ...
- CSS的nth-of-type和nth-child的区别
<!--源代码--><!DOCTYPE html> <html lang="en"> <head> <meta charset ...
- python高级(二)—— python内置序列类型
本文主要内容 序列类型分类: (1)容器序列.扁平序列 (2)可变序列.不可变序列 列表推导式 生成器表达式 元组拆包 切片 排序(list.sort方法和sorted函数) bisect pytho ...
- 'node' 不是内部或外部命令,也不是可运行的程序或批处理文件
状况:安装完nodejs之后,命令行输入node -v, 提示 'node' 不是内部或外部命令,也不是可运行的程序或批处理文件原因:检查环境变量没有配置正确配置环境变量: windows系统里, 需 ...
- Restful API学习笔记
之前关于这个概念在网上看了一些,看完似懂非懂,模模糊糊,发现专业术语或者说书面表达的形式对于理解这种十分抽象的概念还是低效了点. 书面文档方面看了以下几个: 理解本真的REST架构风格 1. 要深入理 ...
- AR和VR的区别到底在哪?
AR是Augmented Reality的字母缩写,中文名字是“增强现实”,是一种全新人机交互技术.通过AR技术,让参与者与虚拟对象进行实时互动,从而获得一种奇妙的视觉体验,而且能够突破空间.时间以及 ...
- APP和小程序哪个更合适企业
很多企业都在纠结做APP好呢,还是做小程序好,那么我们来说说APP和小程序之间的区别,希望通过对比让您了解APP和小程序的功能,让您的企业在制作APP和小程序之间有一个选择. 一. 面向用户群 App ...