PHP语法。布尔运算符,三元运算符和JavaScript

时间:2011-02-21 17:22:21

标签: php syntax

在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']被评估了两次

有什么建议吗?

5 个答案:

答案 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;

来自the documentation

  

从PHP 5.3开始,可以省略三元运算符的中间部分。表达式expr1?:expr3如果expr1的计算结果为TRUE则返回expr1,否则返回expr3。