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

PHP语法。布尔运算符、三元运算符和JavaScript,php,syntax,Php,Syntax,在JavaScript中,我习惯使用以下回退评估 var width = parseInt(e.style.width) || e.offsetWidth() || 480 意思是width将获得最后一个非零(非空…)值 然而,在php中,我无法编写 $a = $_GET['id'] || 1; 我必须这样写 $a = $_GET['id']?$_GET['id']:1; 这是错误的,因为$\u GET['id']计算了两次 有什么建议吗?不幸的是,PHP不支持这种语法。最好使用三元运算符

在JavaScript中,我习惯使用以下回退评估

var width = parseInt(e.style.width) || e.offsetWidth() || 480
意思是
width
将获得最后一个非零(非空…)值 然而,在php中,我无法编写

$a = $_GET['id'] || 1;
我必须这样写

$a = $_GET['id']?$_GET['id']:1;
这是错误的,因为
$\u GET['id']
计算了两次


有什么建议吗?

不幸的是,PHP不支持这种语法。最好使用三元运算符,例如:

$a = $_GET['id'] ? $_GET['id'] : 1;
对于相同的东西,唯一的选择就是使用
开关
条件。

最好是

$a = isset($_GET['id']) ? $_GET['id'] : 1;

如果您有PHP 5.3,您可以简单地执行以下操作:

$a = $_GET['id'] ?: 1;
从PHP手册中可以看出:

由于PHP5.3,可以省略三元运算符的中间部分。表达式expr1?:如果expr1的计算结果为真,则expr3返回expr1,否则返回expr3


如果您没有PHP5.3或更高版本,则必须使用Sarfraz(或更好的,delphist)的建议。然而,在更大的应用程序中,我倾向于将请求变量包装成一种可以在检索请求的函数的参数中指定默认值的方式。这样做的好处是它更干净(更容易理解),并且如果$\u GET变量中不存在索引,它不会生成警告,因为我可以使用
isset
之类的东西来检查数组索引是否存在。我最终得出这样的结论:

在单个数组中查找数组的时间非常有限,实际上没有什么区别

如果要级联多个数组,将值存储在临时变量中会更快:

$tempId = $example['this']['is']['an']['example']['where']['it\'s']['worth']['storing'];

$a = $tempId ? $tempId : 1;

否则
$a=$\u获取['id']$_GET['id']:1很好。

PHP5.3支持以下语法:

$a = $_GET['id'] ?: 1;
发件人:

由于PHP5.3,可以省略三元运算符的中间部分。表达式expr1?:如果expr1的计算结果为真,则expr3返回expr1,否则返回expr3


不完全是
if(!empty($\u GET['id'])
if($\u GET['id'])
相同,只是前者不会引发错误。你所写的与
if(!is_null($\u GET['id'])
相同,只是
isset
不会抛出错误。我相信你。我只是想表达你已经为我打开了美国)你也可以这样做:
a=$\u POST['id']?:$\u GET['id']?:$\u SESSION['id']?:1;-)