PHP三元运算符多个语句

时间:2015-07-31 00:32:50

标签: php ternary-operator

您好我有一段代码:

if($request['txt_!'] != "") {
  $randl1_1 = mt_rand(100000, 999999);
} else {
  $randl1_1 = '';
}

当我将其转换为三元运算符时:

$randl1_1 = ($request['txt_1'] != "") ? mt_rand(100000, 999999) : '';

如果我在if中添加一些内容该怎么办?像,

if($request['txt_!'] != "") {
  $randl1_1 = mt_rand(100000, 999999);
  someFunction();
} else {
  $randl1_1 = '';
}

是否可以在三元运算符中使用?

2 个答案:

答案 0 :(得分:6)

这是可能的,但它会使三元的使用变得不那么有用,因为它会使它变得杂乱(特别是如果你想把它保持在一条线上)。如果您在表达式中将其作为RHS使用,则其返回值也将分配给$randl1_1

如果someFunction()返回了一些真实的东西,那么......

$randl1_1 = ($request['txt_1'] != "") ? someFunction() && mt_rand(100000, 999999) : '';

如果没有,你可以使用||。但正如你所看到的,这很难看。如果someFunction()依赖于$randl1_1,那么你就会遇到更糟糕的问题。 :)

在你的第二个案例中,我会使用你引用的更详细的例子。您希望您的代码能够清楚地表达自己和他人的意图。

尝试将所有东西变成三元组是一种不好的做法。

答案 1 :(得分:3)

您不能将多个语句放入三元运算符的参数中。但是,您可以使用逗号运算符来计算多个表达式:

$rand1_1 = ($request['txt_1'] != "") ? (someFunction(), mt_rand(100000, 999999)) : '';

但是,逗号运算符返回其最后一个操作数。如果你想在>计算你想要分配的值之后执行某些,它将无法工作,例如。

$rand1_1 = ($request['txt_1'] != "") ? (mt_rand(100000, 999999), someFunction()) : '';

这会将$rand1_1设置为someFunction()返回的值,而不是随机值。您必须将随机值保存在变量中:

$rand1_1 = ($request['txt_1'] != "") ? ($temp = mt_rand(100000, 999999), someFunction(), $temp) : '';

所有这些额外的混乱使三元组真的难以阅读,否定了使用它而不是常规if语句的价值。