在PHP中返回操作数的逻辑运算符

在PHP中返回操作数的逻辑运算符,php,design-patterns,logical-operators,idioms,Php,Design Patterns,Logical Operators,Idioms,在任何“健全”的编程语言中,从C到Javascript,如果a为真,则表达式如a | | b(或a或b)计算为a,否则计算为b,使a=params.a | default|a和运算符类似,但是PHP请求不同 有没有办法在PHP中实现这一点?或者是否有PHP程序员使用的“编码习惯用法/模式”而不是下面的代码? $a = $my_a || $default_a; // nope, $a gets a boolean 因为写if($my_a)$a=$my_a;else$a=$default\u a或

在任何“健全”的编程语言中,从C到Javascript,如果
a
为真,则表达式如
a | | b
(或
a或b
)计算为
a
,否则计算为
b
,使
a=params.a | default|a
运算符类似,但是PHP请求不同

有没有办法在PHP中实现这一点?或者是否有PHP程序员使用的“编码习惯用法/模式”而不是下面的代码?

$a = $my_a || $default_a; // nope, $a gets a boolean
因为写
if($my_a)$a=$my_a;else$a=$default\u a
$a=$my\u a$my_a:$default_a
在我看来非常难看,它让我重复一些类似于
$my_a
的内容,这也可能是一个非常长且复杂的表达式,从而违反了代码的基本“干燥性”


这是一件小事,我知道,在中国并不是那么奇怪,但它真的让我很恼火

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

然而

$a = $my_a ?: $default_a;

值得一提的是:这是C和Javascript的不同之处,因为“在一种“理智”语言中”(;)布尔运算的返回值是一个布尔值,而不是它的一个操作数

然而

$a = $my_a ?: $default_a;

由于PHP5.3,可以省略三元运算符的中间部分。表达式expr1?:如果expr1的计算结果为真,则expr3返回expr1,否则返回expr3。但仍有许多当前服务器使用5.2.x。值得一提的是,只有5.3允许此操作。@MihaiStancu那么您应该更改主机。现在是2012年。PHP5.2不再维护,5.3已经失效3年了,甚至5.4也失效了。是时候了…@MihaiStancu对gotcha的版本表示赞赏了,虽然KingCrunch是对的,但对于小规模的web项目,如果客户已经有了主机提供商和/或预付了一年的主机服务费,那么解释他为什么要更换主机提供商就很难了。因为PHP 5.3,可以省略三元运算符的中间部分。表达式expr1?:如果expr1的计算结果为真,则expr3返回expr1,否则返回expr3。但仍有许多当前服务器使用5.2.x。值得一提的是,只有5.3允许此操作。@MihaiStancu那么您应该更改主机。现在是2012年。PHP5.2不再维护,5.3已经失效3年了,甚至5.4也失效了。是时候了…@MihaiStancu对gotcha的版本表示赞赏,虽然KingCrunch是对的,但对于小规模的web项目,如果客户已经有了一个托管提供商和/或预付了一年的托管服务费用,那么解释他为什么要更换托管提供商就很难了。你只是在抱怨php吗?逻辑运算符在php中的工作方式与在其他任何地方一样。更好的是,只需使用三元运算符@MikeS。我真的不知道下面的答案中解释的三元运算符的“默认”行为,你只是在抱怨php吗?逻辑运算符在php中的工作方式与在其他任何地方一样。更好的是,只需使用三元运算符@MikeS。我真的不知道下面的答案中解释的三元运算符的“默认”行为