在JavaScript中,我习惯使用以下后备评估
var width = parseInt(e.style.width) || e.offsetWidth() || 480
意味着width
将获得最后一个非零(非null ...)值
但是,在php我不能写
$a = $_GET['id'] || 1;
我必须这么写
$a = $_GET['id']?$_GET['id']:1;
这是不好的,因为$_GET['id']
被评估了两次
有什么建议吗?
答案 0 :(得分:4)
如果你有PHP 5.3,你可以这样做:
$a = $_GET['id'] ?: 1;
从PHP手册开始:
从PHP 5.3开始,可以省略三元运算符的中间部分。表达式expr1?:expr3如果expr1的计算结果为TRUE则返回expr1,否则返回expr3。
如果您没有PHP 5.3或更高版本,您将不得不使用Sarfraz(或更好的,delphist的)建议。但是,在较大的应用程序中,我倾向于以一种方式包装请求变量,我可以在检索请求的函数的参数中指定默认值。这样做的好处是它更清晰(更容易理解)并且如果$ _GET变量中不存在索引它不会生成警告,因为我可以使用isset
之类的东西来检查数组索引是否存在。我最终得到了类似的东西:
答案 1 :(得分:3)
最好是
$a = isset($_GET['id']) ? $_GET['id'] : 1;
答案 2 :(得分:1)
不幸的是,PHP不支持该语法。你能做的最好的就是像你的例子一样使用三元运算符:
$a = $_GET['id'] ? $_GET['id'] : 1;
对于相同的东西,唯一考虑的问题是使用Switch
条件。
答案 3 :(得分:1)
单个数组中的数组查找是一个非常短暂的时间,它确实没有什么区别。
如果您正在级联多个数组,那么将值存储在临时变量中会更快:
$tempId = $example['this']['is']['an']['example']['where']['it\'s']['worth']['storing'];
$a = $tempId ? $tempId : 1;
否则$a = $_GET['id'] ? $_GET['id'] : 1;
就好了。
答案 4 :(得分:1)
PHP 5.3支持以下语法:
$a = $_GET['id'] ?: 1;
从PHP 5.3开始,可以省略三元运算符的中间部分。表达式expr1?:expr3如果expr1的计算结果为TRUE则返回expr1,否则返回expr3。