像以下代码:
$type = 0;
$name = $type == 0 ? “gold” : $type == 1 ? “diamond” : $type == 2 ? “crown” : “”;
echo $name;
它死活输出为crown..像js, java, c++都是输出为gold的..例如:
var type = 0;
var name = type == 0 ? “gold” : type == 1 ? “diamond” : type == 2 ? “crown” : “”;
console.log(name);
相不通为神马php这么例外.
后来我改成:
$type = 0;
$name = $type == 0 ? “gold” : ($type == 1 ? “diamond” : ($type == 2 ? “crown” : “”));
echo $name;
就能输出gold了..
我说php的运算符优先级,还能有些科学依据么?
话说,第一段代码为什么输出的是crown,哪位大神给讲讲???
回复讨论(解决方案)
为了让你知道 php 是谁!(js, java, c++ 都是 c 这个娘生的)
$type = 0;
$name = $type == 0 ? “gold” : ($type == 1 ? “diamond” : ($type == 2 ? “crown” : “”));
echo $name;
$type = 0;
$name = array(“gold”, “diamond”, “crown”);
echo $name[$type];
php 三目运算符是从右到左的。
$name = $type == 0 ? “gold” : $type == 1 ? “diamond” : $type == 2 ? “crown” : “”;
相当于
$name = (($type == 0 ? “gold” : $type == 1 )? “diamond” : $type == 2 )? “crown” : “”;
$type == 0 ? “gold” : $type == 1 的值是gold 等于true
(($type == 0 ? “gold” : $type == 1 )? “diamond” : $type == 2 ) 的值是diamond等于true
所以最后输出crown;
php 三目运算符是从右到左的。
$name = $type == 0 ? “gold” : $type == 1 ? “diamond” : $type == 2 ? “crown” : “”;
相当于
$name = (($type == 0 ? “gold” : $type == 1 )? “diamond” : $type == 2 )? “crown” : “”;
$type == 0 ? “gold” : $type == 1 的值是gold 等于true
(($type == 0 ? “gold” : $type == 1 )? “diamond” : $type == 2 ) 的值是diamond等于true
所以最后输出crown;
牛!!!!!!!!!!!!!!!
很有用,感谢楼主
$type = 0;
$name = array(“gold”, “diamond”, “crown”);
echo $name[$type];
您这个挺好的.
可是有时候就是想用三元运算符,搞成
if
else if
else if
else if
else if
else if
else if
这些玩意.
一不小心就中招!!!!!!!!!!!!!!!!!!!
php 三目运算符是从右到左的。
$name = $type == 0 ? “gold” : $type == 1 ? “diamond” : $type == 2 ? “crown” : “”;
相当于
$name = (($type == 0 ? “gold” : $type == 1 )? “diamond” : $type == 2 )? “crown” : “”;
$type == 0 ? “gold” : $type == 1 的值是gold 等于true
(($type == 0 ? “gold” : $type == 1 )? “diamond” : $type == 2 ) 的值是diamond等于true
所以最后输出crown;
没看懂,应该很高深的样子.
我只死记硬背结果就好了.
习惯就好,都是一些基础点。
你就不能打个括号?
习惯就好,都是一些基础点。
是的,目前比较不太了解脚本语言,无类型,这个有些难.
$v = ’20’;
$v2 = ’30’;
$v3 = $v + $v2; //这里是50了,因为php解释器自动把’20’,’30’转化为了数字.即变成20 + 30.
$b = ‘false’;
echo $b == true ? ‘111’ : ‘000’; //像这个输出’111’就不理解了,为毛php不自动转换为bool类型呢?
这些坑,一不小心,就掉下去…
你就不能打个括号?
我现在都是打括号的.
但之前是怎么也没想到,php如此与众不同嘛.
习惯就好,都是一些基础点。
是的,目前比较不太了解脚本语言,无类型,这个有些难.
$v = ’20’;
$v2 = ’30’;
$v3 = $v + $v2; //这里是50了,因为php解释器自动把’20’,’30’转化为了数字.即变成20 + 30.
$b = ‘false’;
echo $b == true ? ‘111’ : ‘000’; //像这个输出’111’就不理解了,为毛php不自动转换为bool类型呢?
这些坑,一不小心,就掉下去…
写php不需要安装php公司什么exe程序之类,直接随便一个记事本就可以写,在写完保存.php文件时当然也就无从检测你的代码类型语法等是否合规!
易语言 c++ dilphin这些程序语言不存在上面那种问题,因为你写这些语言必须用这些公司专门的exe程序来写啊,当然点保存时它就可以检测提示你的代码是否合格了!
$b = ‘false’;
echo $b == true ? ‘111’ : ‘000’; //像这个输出’111’就不理解了,为毛php不自动转换为bool类型呢?
其实后面的 $b飞true 比较时是转成bool类型了的, 但是字符串 ‘false’ 转成bool类型不就是true了
php的处理是:如果是一个字符串,长度大于0 不等于 !== ‘0’ 都是true