最近经常写这样的代码,感觉很嗦:
$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';
有没有什么黑科技呀?
业务都还没写完,天天想这些。感觉我这是病,得治。
目前比较好的方法:
($str = substr($string, $start, $length)) !== false || $str = '123';
// 条件:$start >= 0 $length > 0 符合一般的应用场景,推荐 $array[] = isset( $string[$start] ) ? substr( $string, $start, $length ) : '123';
然后如果是公司内部协作开发的话还是「不要标新立异」。
![]() | 1 imydou 2016-03-26 20:45:18 +08:00 if(true): endif; |
![]() | 2 snailsir 2016-03-26 20:58:56 +08:00 via iPhone $str = substr($string, 21, 10)) || $str = '123'; |
![]() | 3 snailsir 2016-03-26 21:00:14 +08:00 via iPhone ![]() ($str = substr($string, 21, 10)) || $str = '123'; 漏了个括号 |
![]() | 5 iyaozhen OP @snailsir 貌似不行,和 $str = substr($string, 0, 1) ?: '123'; 一样有弊端( 0 == false ) 还是要这样:($str = substr($string, 0, 1)) !== false || $str = '123'; |
![]() | 6 abelyao 2016-03-26 21:23:49 +08:00 ![]() $array[] = substr($string, $tart, $length) or $array[] = '123'; 这样呢? |
![]() | 7 tuuuz 2016-03-26 21:46:04 +08:00 ![]() 我觉得就按嗦的那种方式写吧~ 感觉可读性会比较好,如果以后有同事需要维护你的代码,他会感谢你的 不喜勿喷 |
![]() | 8 hellov22ex 2016-03-26 21:49:32 +08:00 ![]() 最正式或者说最通俗易懂的写法 |
![]() | 11 xi4oh4o 2016-03-26 22:00:19 +08:00 ![]() 简单返回值的话用 expr1 ?: expr3 剩下的 if else 不要少,只有 if 也不好 |
![]() | 12 abelyao 2016-03-26 22:50:40 +08:00 ![]() @iyaozhen 我晕… 我就是帮你简化到最简单的程度,你增加一个中间变量也不影响这个写法成不成立嘛,那就改成: $str = substr($string, $start, $length) or $str = '123'; 关键是这写法有没有其它坑,不懂你的实际应用情况~ |
![]() | 13 Sunyanzi 2016-03-26 23:02:54 +08:00 ![]() 为什么依赖 substr 的返回值 ..? 在 $start 非负 $length 恒正的情况下我会这么写 ... $array[] = isset( $string[1] ) ? substr( $string, 1, 10 ) : '123'; 对的我就是能不使用额外变量就不使用额外变量的三元狂魔 ... |
![]() | 14 iyaozhen OP @abelyao 额,不好意思。我没别的意思。只是我也那边试过,发现不行。 嗯 这个目前看来是最优的,也便于阅读。但还是有点小问题,#5 楼。 substr($string, $start, $length)有可能返回 0 ,布尔值是 false 。 |
![]() | 15 Lucups 2016-03-26 23:07:12 +08:00 ![]() 你的代码不够嗦的后果就是你的同事会跟你嗦。 :) |
![]() | 17 barbery 2016-03-26 23:14:48 +08:00 $str || $str = '123'; |
![]() | 19 wudanyang 2016-03-26 23:21:07 +08:00 ![]() $str = ($strTemp = substr($string, 1, 10)) === false ? '123' : $strTemp; |
![]() | 20 loading 2016-03-26 23:22:11 +08:00 via Android ![]() 不要使用这些自己还没搞懂的代码!特别是团队。 |
22 g8287694 2016-03-26 23:47:13 +08:00 最近就在被各种简写 搞的疲惫不堪 看到这帖子 顿时一股火就直冒出来 |
24 lostsnow 2016-03-27 01:36:24 +08:00 不要简写 |
![]() | 25 yangqi 2016-03-27 01:43:06 +08:00 ![]() 确实需要治,简写并不能说明你水平高,以后还会被别人背地里画圈圈的。 |
![]() | 26 slowgen 2016-03-27 02:52:58 +08:00 via iPad ![]() “调试程序的难度是写代码的两倍。因此,如果你的代码写的太聪明了,恐怕就没能力调试它了。” 我曾经改过一个可以拆成四行的三目运算符但是写在了同一行的代码,那酸爽。。。 |
![]() | 27 zjqzxc 2016-03-27 10:28:48 +08:00 ![]() 难道不是应该把这段代码写到一个函数里吗? 万一过几天需求改了要把 123 换成 456 难道还要挨着一个一个改。。 |
![]() | 28 kiwi95 2016-03-27 12:06:58 +08:00 ![]() 第一种就是推荐的写法,也不麻烦,就多两行代码而已,好理解多了。三目运算符太长了对于理解和调试都有很大的问题 像 golang 没有三目运算符就没这些事了 |
29 ppto 2016-03-31 09:10:19 +08:00 php 内核代码在线查看工具, www.phpsourcechm.com # |