因为js经常有这样的写法,但是我在php下试了却不行,$a
为null
,false
,-1
时都无效。
现在用的比较啰嗦的写法:
$a = $a?$a:$b;
$a = is_*($a)?$a:$b;
但是如何满足这样的写法:
$a = $a or $b;
因为js经常有这样的写法,但是我在php下试了却不行,$a
为null
,false
,-1
时都无效。
现在用的比较啰嗦的写法:
$a = $a?$a:$b;
$a = is_*($a)?$a:$b;
但是如何满足这样的写法:
$a = $a or $b;
PHP里的 || 和 or 操作符返回值都是布尔值,所以,不可能实现像Javascript和Perl里那样的a = a || b的效果了。
最接近最简洁的写法便是?:操作符:
$a = $a ? $a : $b;
那么$a = $a or $b到底返回什么呢?且看一段测试代码:
<?php
$a = 0 || false;
var_dump($a);
$a = 0 or false;
var_dump($a);
它将输出:
bool(false)
int(0)
为什么输出不一样?因为 || 和 or 两个操作符的优先级不一样:
PHP操作符优先级:http://www.php.net/manual/en/language.operators.precedence.php
8 回答4.7k 阅读✓ 已解决
6 回答3.4k 阅读✓ 已解决
5 回答2.8k 阅读✓ 已解决
5 回答6.3k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
PHP是不支持
$a = $a || $b;
这种赋值写法的,这样写返回的是一个或运算的布尔值。(优先级请阅读 @qinjianxiang 同学的答案 )但是,对于PHP本身提供的三元运算
(expr1) ? (expr2) : (expr3)
从PHP5.3开始已经可以省略expr2,因此你可以简写成下面这样:简洁程度应该跟JS里面的
a = a || b
差不多吧? 但是要注意:PHP中 0、null、''(空字符串)都是==false的。