PHP if 判断怎么简写?

2016-03-26 20:43:02 +08:00
 iyaozhen

最近经常写这样的代码,感觉很啰嗦:

$array = [];

$string = "0...balabala";
// $start 和 $length 变量值不固定
$str = substr($string, 1, 10);
if ($str === false) {
    $str = '123';
}

$array[] = $str;

三目运算?

$str = substr($string, 1, 10) === false ? '123' : substr($string, 10, 10);

substr 两次影响效率?

($str = substr($string, 1, 10)) === false ? $str = '123' : null;

这样?(错误)

$str = substr($string, 0, 1) ?: '123';

有没有什么黑科技呀?

业务都还没写完,天天想这些。感觉我这是病,得治。

11300 次点击
所在节点    PHP
29 条回复
imydou
2016-03-26 20:45:18 +08:00
if(true):

endif;
snailsir
2016-03-26 20:58:56 +08:00
$str = substr($string, 21, 10)) || $str = '123';
snailsir
2016-03-26 21:00:14 +08:00
($str = substr($string, 21, 10)) || $str = '123';

漏了个括号
iyaozhen
2016-03-26 21:01:27 +08:00
@snailsir $str 最终有可能等于 true
iyaozhen
2016-03-26 21:05:46 +08:00
@snailsir 貌似不行,和 $str = substr($string, 0, 1) ?: '123'; 一样有弊端( 0 == false )

还是要这样:($str = substr($string, 0, 1)) !== false || $str = '123';
abelyao
2016-03-26 21:23:49 +08:00
$array[] = substr($string, $start, $length) or $array[] = '123';
这样呢?
tuuuz
2016-03-26 21:46:04 +08:00
我觉得就按啰嗦的那种方式写吧~

感觉可读性会比较好,如果以后有同事需要维护你的代码,他会感谢你的

不喜勿喷😀
hellov22ex
2016-03-26 21:49:32 +08:00
最正式或者说最通俗易懂的写法
iyaozhen
2016-03-26 21:53:45 +08:00
@abelyao 这样有个坑。$array 有可能增加两个。😂 中间变量还是要的
iyaozhen
2016-03-26 21:57:42 +08:00
@tuuuz 哈哈,这个赞同。
xi4oh4o
2016-03-26 22:00:19 +08:00
简单返回值的话用 expr1 ?: expr3
剩下的 if else 不要少,只有 if 也不好
abelyao
2016-03-26 22:50:40 +08:00
@iyaozhen 我晕… 我就是帮你简化到最简单的程度,你增加一个中间变量也不影响这个写法成不成立嘛,那就改成: $str = substr($string, $start, $length) or $str = '123';
关键是这写法有没有其它坑,不懂你的实际应用情况~
Sunyanzi
2016-03-26 23:02:54 +08:00
为什么依赖 substr 的返回值 ..? 在 $start 非负 $length 恒正的情况下我会这么写 ...

$array[] = isset( $string[1] ) ? substr( $string, 1, 10 ) : '123';

对的我就是能不使用额外变量就不使用额外变量的三元狂魔 ...
iyaozhen
2016-03-26 23:04:14 +08:00
@abelyao 额,不好意思。我没别的意思。只是我也那边试过,发现不行。

嗯 这个目前看来是最优的,也便于阅读。但还是有点小问题,#5 楼。

substr($string, $start, $length)有可能返回 0 ,布尔值是 false 。
Lucups
2016-03-26 23:07:12 +08:00
你的代码不够啰嗦的后果就是你的同事会跟你啰嗦。

:)
iyaozhen
2016-03-26 23:13:56 +08:00
@Sunyanzi 赞,这个方法很巧妙呀。
barbery
2016-03-26 23:14:48 +08:00
$str || $str = '123';
iyaozhen
2016-03-26 23:16:56 +08:00
@Lucups 嗯嗯,是的,道理我懂。多了解点「技巧」可以在自己项目里面用用。
wudanyang
2016-03-26 23:21:07 +08:00
$str = ($strTemp = substr($string, 1, 10)) === false ? '123' : $strTemp;
loading
2016-03-26 23:22:11 +08:00
不要使用这些自己还没搞懂的代码!特别是团队。

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

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

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

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

© 2021 V2EX