PHP,为什么没有人使用? : operator?

标签 php ternary-operator

我似乎找不到任何关于此的讨论。

在 JavaScript 中检查某些内容是否存在,如果不存在则使用默认值,如下所示:

var myvariable = mysetting || 3

据我了解,在 PHP 中,可以这样做同样的事情:

$myvariable = $mysetting ?: 3;

我完全不喜欢这个吗?我理解不使用 isset()not_empty() 等的含义,但如果我只是想知道变量是否存在并且是否真实,否则使用默认值- 我认为这应该有效。这个语法有什么隐藏的不好的地方吗?

最佳答案

因为它不起作用。该代码仍然会抛出一个通知 Notice: Undefined variable: mysetting in C:\wamp\www\x.php on line,该通知可能对用户可见,具体取决于 PHP 设置。除此之外,它会起作用。如果通知被抑制,那么最终结果就是正确的。

因此,为了解决这个问题,您可以使用 isset,它实际上并不是一个函数,而是一个语言构造,并且是专门为执行此检查而设计的:

$myvariable = isset($mysetting)? $mysetting: 3;

或者您可以使用 @ 运算符抑制通知:

$myvariable = @$mysetting ?: 3;

对于这种具体情况,也许这是可以接受的,但一般来说,使用 @ 会被许多人所反对。就我个人而言,我宁愿使用更多的角色并让它感觉不那么“肮脏”,但这是一个意见问题。

人们可能不使用它的另一个原因是它相对较新(PHP 5.3)。并非每个人都知道这种新语法或对其感到满意。它们已经被用来isset很多年了,而且旧习惯很难改掉。

关于PHP,为什么没有人使用? : operator?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26264770/

相关文章:

php - 从表中查询,这是从 Information_Schema.Tables 结果派生的

php - 停止在 php 中输出动态 ul 列表中的一项

javascript - 如何使用 PHP 获取多选项选择中的所有选项?

c++ - 处理命令行参数

php - cre 加载 6.4.1 管理

php - 可以把js和css放到public文件夹外吗?

ternary-operator - 记住三元运算符语法

cmake - CMake 生成器表达式中的三元运算符

c# - 存在多个复选框时如何使用三元运算符检查单个复选框?

jsp - JSTL/EL 中的三元运算符