【问题标题】:logical operator that returns operands in PHP在 PHP 中返回操作数的逻辑运算符
【发布时间】:2012-07-03 13:01:51
【问题描述】:

在任何“正常”的编程语言中,从 C 到 Javascript,如果 a 为真,则表达式如 a || b(或 a or b)计算为 a,否则计算为 b,这使得事情成为可能像 a = params.a || default_aand 运算符类似,但 PHP 要求有所不同。

有什么办法可以在 PHP 中实现这一点吗?或者是否有任何 PHP 程序员使用的“编码习惯用法/模式”来代替下面的代码?

$a = $my_a || $default_a; // nope, $a gets a boolean

因为写if ($my_a) $a = $my_a; else $a = $default_a;$a = $my_a ? $my_a : $default_a; 对我来说看起来很丑陋,并且通过让我重复$my_a 之类的内容而违反了代码的基本“干性”,这也可能是一个非常长而复杂的表达式。

我知道,这是一件小事,在double clawed hammer 的土地上并不那么奇怪,但它真的让我很恼火!

【问题讨论】:

  • 你只是在抱怨php吗?逻辑运算符在 php 中的工作方式与在其他任何地方一样。更好的是,只需使用三元运算符php.net/manual/en/language.operators.comparison.php
  • @MikeS。我真的不知道下面答案中解释的三元运算符的“默认”行为

标签: php design-patterns logical-operators idioms


【解决方案1】:

值得一提:是 C 和 Javascript 有所不同,因为“在“正常”语言中”(;)) 布尔运算的返回值是布尔值,而不是其操作数之一。

然而

$a = $my_a ?: $default_a;

【讨论】:

  • 自 PHP 5.3 起,可以省略三元运算符的中间部分。表达式 expr1 ?:如果 expr1 的计算结果为 TRUE,则 expr3 返回 expr1,否则返回 expr3。
  • 目前仍有许多服务器使用 5.2.x,值得一提的是,只有 5.3 允许这样做。
  • @MihaiStancu 那么你应该更换你的主机。现在是 2012 年。PHP5.2 不再维护,5.3 已经发布了 3 年,甚至 5.4 也已经发布了。是时候了……
  • @MihaiStancu 为这个版本的问题点赞,虽然 KingCrunch 是对的
  • 他是对的,但对于客户已经拥有托管服务提供商和/或已预付一年托管服务费用的小型 Web 项目,很难解释为什么他必须更换托管服务供应商。
猜你喜欢
  • 2017-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-18
相关资源
最近更新 更多