昨天去某大型公司面试,做了一套面试题,整套面试题的基础要求比较高,对于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三维优先级运算的更多相关文章

  1. JS运算的优先级

    汇总表 下面的表将所有运算符按照优先级的不同从高到低排列. 优先级 运算类型 关联性 运算符 20 圆括号 n/a ( … ) 19 成员访问 从左到右 … . … 需计算的成员访问 从左到右 … [ ...

  2. js算数优先级

    .fullwidth-table { background: white } .fullwidth-table>th { background: #f50 } 优先级 运算类型 关联性 运算符 ...

  3. js 运算符优先级

    在看jquery源码,仔细看入口函数的时候,有点懵了.看到与或.多重三目,傻傻的分不清,就代码仔细的区分下运算符优先级,以前都是呼呼的飘过.看来任何一个细节都不能忽略,不然效率极低.. !functi ...

  4. 深入理解CSS选择器优先级的计算

    选择器的优先级关系到元素应用哪个样式.在CSS2.1的规范(http://www.w3.org/TR/2009/CR-CSS2-20090908/cascade.html#specificity)中是 ...

  5. JavaScript快速入门(五)——表达式运算

    赋值运算 赋值运算的形式为左值 = 右值.如果同个表达式中有多个赋值运算,则从右到左运算.例如: a = b = c; // 和下面两行等价 b = c; a = b; 另外一种赋值运算的形式叫做复合 ...

  6. 一道面试题 包含了new的细节 和运算符的优先级 还有属性访问机制

    function Foo() { getName = function () { alert(1); } return this; } Foo.getName = function () { aler ...

  7. JavaScript基础之运算符及全面的运算符优先级总结

    算数运算符: 加+,减—,乘*,除/,求余%,加加++,减减——, 加减乘除求余运算与数学上的用法完全一样. 不过,加号+还有连接字符串的作用,其他运算符还可以将字符串数字转换成数值型,参见JavaS ...

  8. 【javascript基础】运算符优先级

    优先级 运算类型 关联性 运算符 1 成员运算符 从左到右 . [] new 从右到左 new 2 函数调用运算符 从左到右 () 3 自增运算符 n/a ++ 自减运算符 n/a -- 4 逻辑非运 ...

  9. CSS学习之选择器优先级与属性继承

    CSS学习之选择器优先级与属性继承 选择器优先级 其实选择器是具有优先级的,我们来看下面这一组案例: <!DOCTYPE html> <html lang="en" ...

随机推荐

  1. CentOS加入Windows域

    CentOS加入Windows域,为减少操作已经提前关掉了selinux,防火墙.并且更改了主机名 yum install  nss-pam-ldapd -y 第一步:更改主机名为linux.itxd ...

  2. HEOI2019游记(退役记)

    少了回程铁路相关信息,有空补 AFO 辣鸡蒟蒻ghj1222顺利地退役了 由于没带手机拍照片,本次坐动车不写运转记录,下次去CTS/APIO应该是坐普速车,应该能带手机拍照,应该会写运转记录 Day ...

  3. iframe自适应高度,多层嵌套iframe自适应高度的解决方法

    在页面无刷新更新方面,虽然现在的ajax很强悍,但是处理代码相对多点.想比之下,iframe就简单多了!处理iframe的自适应宽.高,会经常用到,网上整理了一份,写在这里备用: 单个iframe 高 ...

  4. java FastJSON的使用

    1.JSON介绍 JSON(javaScript Object Notation)是一种轻量级的数据交换格式.主要采用键值对({"name": "json"}) ...

  5. logback 发送邮件的类.

    类名 : SMTPAppenderBase方法名: sendBuffer

  6. TD-LTE技术原理与系统设计

    王映民 等.人邮2010 E-UTRAN E-NodeB 无线资源管理承载 路由到SGW IP头压缩加密 UE附着MME选择 寻呼 广播 测量 EPC SGW 移动性管理  路由转发 终止寻呼 监听 ...

  7. Python——数据交换格式简要

    简单数据交换格式 CSV: 一般用  open()  函数和字符串拆分  split()  方法,但python有内置的csv模块 读: import csv with open(r"C:\ ...

  8. linux操作python

    Linux安装python3: sudo apt-get install python3.5 安装python库 sudo apt-get install python3-setuptools sud ...

  9. npm run build报错 ,resolve is not defined

    今天在build项目的时候报: ReferenceError: resolve is not defined npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ...

  10. 性能调优之vmstat命令(转)

    vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存.进程.IO读写.CPU活动等进行监视.它是对系统的整体情况进行统计,不足之处是无法对某 ...