如果没有,请替换为速记

时间:2015-05-07 07:42:48

标签: php optimization refactoring shorthand-if

我看到很多人习惯在他们的代码中执行此操作:

$value = isset($text) ? $text : "";

此代码实质上意味着将$value设置为$number(如果已设置),否则将$value设置为""

我进行了一些实验,并提出了一个更清晰的语法:

$value = "".$text;

$textundefined时,此代码涵盖所有案例并以相同方式运作。

所以,我的问题是:

  1. 是否有更好,更短,更清洁的方式$value = isset($text) ? $text : "";
  2. 我认为我的方法以同样的方式工作是错误的吗?(除了isset案例)
  3. 我的方法是否可以修改以解决isset案例?

3 个答案:

答案 0 :(得分:1)

三元已经是那个兄弟的最短代码。你已经知道了。

答案 1 :(得分:1)

是的,它确实给出相同的结果,但仅当$test包含空字符串时。如果$test未初始化,则会生成错误,但检查这是否是此三元if语句的目的。

如果你想在不使用if语句的情况下做同样的事情,你仍然需要检查是否设置了$test,如果没有,则使用空字符串初始化它,这需要另一个if语句

总结:不,似乎没有更好的方法来实现同样的目标。

答案 2 :(得分:0)

从PHP 7.0开始,有一个空的合并运算符可以缩短它:

// ternary
$value = isset($text) ? $text : "";

// null coalesce
$value = $text ?? "";

如果未定义变量,则连接语句将生成错误。