yangzailu

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

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;

 

posted on   飞离地平线  阅读(761)  评论(5编辑  收藏  举报

编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示