三元表达式是要么没人理它,要么它就是焦点,没人理它时是因为它可以被if代替,例如
$a="default value"; $a=$exp?"real value":"default value";
总有时会存在上面这种情况,其实用if更合理
if($exp) $a="real value";
说它是焦点是因为
1:有人喜欢精减代码,把很多的if...else精减成三表达式
$v=85; echo $v<60?"不及格":$v==60?"过关":$v>80?"优秀":"合格";
php的官方手册也不建议上面这种写法,语义上混乱不说,修正或以后改的时候也容易出错,代码易读和易维护是重点
2.面试的时候总能看到它的变体试题,主要是看你对基础了解到什么程度和看问题的角度,因为三元表达式的错误能反映不至一个点上的知识
下面的示例来自手册
echo true?'true':false?'t':'f';
2.1.运算符的优先级,你期望它是这样执行的
echo true?'true':(false?'t':'f');
其实它是这样执行的
echo (true?'true':false)?'t':'f';
2.2.类型转换,上面括号中的表达式值成了
(字符串)?真:假
php以下在转换成boolean类型时为:false
1.空字符串,以及字符串 "0"
2.false本身
3.来自<<java解惑>>中的关于三元表达试的迷题
public class DosEquis{ public static void main(String[] args){ char x = 'X'; int i = 0; System.out.println(true ? x : 0); System.out.println(false ? i : x); } }
3.1,println方法的重载
3.2,类型的转换,第二个println中,char进行了类型提升,升为int,
再这注意char,int之间的符号区别,前者无符号,后者有符号
最后java的数字基本类型都是二进制的
3.3.字面常量和变量对三元表达式结果的影响
最后:
不论是面试题还是工作中的程序bug,它们往往折射出的问题不是一点或二点能总结的。更多的需要程序员自身去领悟语言的精粹,而不是去抱怨这种语言有多烂别的语言有多人性和完美