PHP,为什么没有人使用?:运算符?

时间:2014-10-08 19:20:32

标签: php ternary-operator

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

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

var myvariable = mysetting || 3

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

$myvariable = $mysetting ?: 3;

我完全不喜欢这个吗?我理解不使用isset()not_empty()以及所有这些的含义,但是如果我只想知道变量是否存在并且是否真实,否则使用默认值 - 我认为这应该有效。这种语法对它有任何隐藏的坏处吗?

2 个答案:

答案 0 :(得分:2)

因为它不起作用。该代码仍将引发通知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多年了,老习惯很难过。

答案 1 :(得分:0)

这些陈述并不等同。从我发现的javascript相当于:

if (!mysetting) {
  myvariable = 3;
} else {
  myvariable = mysetting;
}

使用三元运算符的等效PHP语句是:

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

又名:

if( isset($myvariable) ) {
  $mysetting = $myvariable;
} else {
  $mysetting = 3;
}

三元运算符本质上是if和else语句的简写,第一个操作数被解释为逻辑表达式。