因为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
4 回答970 阅读
1 回答862 阅读✓ 已解决
1 回答1.1k 阅读
1 回答653 阅读✓ 已解决
2 回答781 阅读
2 回答627 阅读
1 回答1.3k 阅读
PHP是不支持
$a = $a || $b;这种赋值写法的,这样写返回的是一个或运算的布尔值。(优先级请阅读 @qinjianxiang 同学的答案 )但是,对于PHP本身提供的三元运算
(expr1) ? (expr2) : (expr3)从PHP5.3开始已经可以省略expr2,因此你可以简写成下面这样:简洁程度应该跟JS里面的
a = a || b差不多吧? 但是要注意:PHP中 0、null、''(空字符串)都是==false的。