首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP语法。布尔运算符、三元运算符和JavaScript

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

Stack Overflow用户
提问于 2011-02-22 01:22:21
回答 5查看 946关注 0票数 2

在JavaScript中,我习惯于使用以下后备评估

代码语言:javascript
运行
复制
var width = parseInt(e.style.width) || e.offsetWidth() || 480

这意味着width将获得最后一个非零(非null...)值,但是在php中我不能写

代码语言:javascript
运行
复制
$a = $_GET['id'] || 1;

我不得不这样写

代码语言:javascript
运行
复制
$a = $_GET['id']?$_GET['id']:1;

这很糟糕,因为$_GET['id']被计算了两次

有什么建议吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-02-22 01:27:27

如果你使用的是PHP 5.3,你可以简单地这样做:

代码语言:javascript
运行
复制
$a = $_GET['id'] ?: 1;

如PHP手册中所述:

从PHP5.3开始,可以省略三元运算符的中间部分。Expression expr1 ?:如果expr1计算结果为TRUE,则expr3返回expr1,否则返回expr3。

如果你没有PHP5.3或更高版本,你将不得不使用Sarfraz的建议(或者更好,delphist的建议)。但是,在较大的应用程序中,我倾向于将请求变量包装为可以在检索请求的函数的参数中指定默认值的方式。这样做的优点是更清晰(更容易理解),而且如果索引不存在于$_GET变量中,它不会生成警告,因为我可以使用isset之类的东西来检查数组索引是否存在。我最终得到了类似这样的结果:

票数 4
EN

Stack Overflow用户

发布于 2011-02-22 01:26:46

这会更好

代码语言:javascript
运行
复制
$a = isset($_GET['id']) ? $_GET['id'] : 1;
票数 3
EN

Stack Overflow用户

发布于 2011-02-22 01:25:09

不幸的是,PHP不支持这种语法。你能做的最好的就是像你的例子一样使用三元运算符:

代码语言:javascript
运行
复制
$a = $_GET['id'] ? $_GET['id'] : 1;

对于等价的东西,脑海中出现的唯一选择是使用Switch条件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5069093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档