我似乎无法找到任何关于此的讨论。
在JavaScript中检查是否存在某些内容,如果不存在则使用默认值:
var myvariable = mysetting || 3
在我理解的PHP中,同样的事情可以这样做:
$myvariable = $mysetting ?: 3;
我完全不喜欢这个吗?我理解不使用isset()
和not_empty()
以及所有这些的含义,但是如果我只想知道变量是否存在并且是否真实,否则使用默认值 - 我认为这应该有效。这种语法对它有任何隐藏的坏处吗?
答案 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语句的简写,第一个操作数被解释为逻辑表达式。