这种一句话的 if, else 有没有优雅的处理方法?

2015-03-20 09:57:11 +08:00
 blue7wings
if ($is_false)
$this->rollback();
else
$this->commit();

有没有像三元运算符那样,一条语句就搞定的?
10493 次点击
所在节点    PHP
73 条回复
gihnius
2015-03-20 22:41:58 +08:00
Lisp style:

(if bool then else)
(if false rollback-this commit-this)
(if is-false (rollback this) (commit this))
(if (false this) (rollback this) (commit this))
znoodl
2015-03-20 22:43:52 +08:00
前几天刚写了个一行的,后来又改掉换成多行
(a && b) || c
a ? b : c
这两种效果应该相同
rushcheyo
2015-03-20 22:45:12 +08:00
(if (is-false) (funcall rollback) (funcall commit))
rushcheyo
2015-03-20 22:45:24 +08:00
(if (is-false) (rollback) (commit))
lujjjh
2015-03-20 22:45:51 +08:00
很奇怪的事情,要优雅,为什么不用异常处理?而且居然没人提到,很多人都在单纯地“优化”这句 if。

如果用的是 PDO 就更不可思议了,感觉没有好好看官方的例子。
ryd994
2015-03-20 22:56:35 +08:00
if ($is_false) $this->rollback();
else $this->commit();
这样呢?
用缩进,同时在同一行,不用花括号因为不可能看错
glongzh
2015-03-20 23:00:39 +08:00
if...else不就是干这个的么。。。这都不用,那各语言的if...else是什么用途?
solupro
2015-03-21 09:54:43 +08:00
我也觉得直接用if else就好,如果想绕,也是可以的。

call_user_method_array(['rollback', 'commit'][intval(boolval($is_false))], $this, []);
Syec
2015-03-21 14:24:38 +08:00
我觉得这样写就挺好呀,可读性多好
kisshere
2015-03-21 19:39:31 +08:00
楼上的,我就不明白,一堆后端代码有啥好简化的?给自己看孤芳自赏好证明自己很牛叉,用了一堆三元运算符就是大神了?反正也没人看见你的代码,如果是js,用三元运算符之类的逼格还高点,至少还有人看得见
picasso250
2015-03-22 18:40:19 +08:00
逻辑派:
$ok or $db->rollback();
$ok and $db->commit();

动态派:
$db->{$ok ? 'commit' : 'rollback'}();

ps 但是我支持多行派、人能看懂派。
picasso250
2015-03-22 18:42:55 +08:00
@lujjjh 确实,数据库操作和exception简直是绝配。
bmy001
2015-03-23 12:59:41 +08:00
直接用三元不就好了?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/178153

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX