【问题标题】:PHP Ternary Operator multiple statementsPHP 三元运算符多条语句
【发布时间】:2015-07-31 00:32:50
【问题描述】:

你好,我有一段代码:

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 = '';
}

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

【问题讨论】:

  • @Rizier123 是的,它正在工作,但只是想问一下是否有类似的东西:D

标签: php ternary-operator


【解决方案1】:

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

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

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

如果没有,您可以使用||。但正如你所见,这很丑陋。如果someFunction() 依赖于$randl1_1,那么你的问题会更严重。 :)

在您的第二种情况下,我将使用您引用的更详细的示例。您希望您的代码清楚地传达给您自己和他人的意图。

试图将所有内容都塞进三元组是一种不好的做法。

【讨论】:

  • 有可能你能给个演示吗?
  • 您展示的示例与 OP 的最后一个代码块不同。在 OP 的代码中,该函数既不必返回某些东西,也不必通过 mt_rand() 调用连接它或类似的东西。
  • @Rizier123 我意识到,这就是为什么我写了一些东西来描述它如何需要一些假设。无论哪种方式,它都不会是好的代码。只是想展示它是如何可能完成的。
【解决方案2】:

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

$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 语句的价值。

【讨论】:

  • 谢谢先生。否则会正常
  • 啊。终于有了我想到的答案:)第一句话说明了一切!
  • 糟糕,与大多数其他仿照 C 的语言不同,PHP 没有逗号运算符。所以这个答案全错了。
猜你喜欢
  • 1970-01-01
  • 2018-09-27
  • 1970-01-01
  • 1970-01-01
  • 2019-12-30
  • 1970-01-01
  • 1970-01-01
  • 2013-02-13
相关资源
最近更新 更多