欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

一个只有在精神病院住过的人才能想到的写法

程序员文章站 2022-06-07 14:07:51
...
下面是某框架源码,我读到图中所示这里愤怒的拍案而起,但马上又冷静下来原谅了作者,因为这种代码只有只有在精神病院住过的人才能想到的写法,所以不能和他计较了。
事想是这样的,一个类中的方法read里面用分割替换来判断情况及采取的措施,让人不解的是,在实例化时,代进去的参数里没有逗号,如何分割 呢?这种情况肯定不在其中,比如代进去的参数是home_index_index,假如此时下文还有if的话也可,但是下面木了,可让人捉摸不透的是,在模板中竟然能够获取数据,晕!你们谁能知道这个精神病是怎么玩的吗


回复讨论(解决方案)

输出一下$file看看

输出一下$file看看



输出一下$file看看


输出的结果是
core_lang_indexcommon,home_layout

$s = 'abcd';$tmp = explode(',', $s);print_r($tmp);
Array(    [0] => abcd)

明明是没有逗号,却也产生了数组。你说这是为什么呢?

不要总说人家“吸毒”、“精神病”,一付愤世嫉俗的样子,这样会使自己变得浮躁
你只需动动手,就知道他为什么会这样写了

home_index_index
能得到
core_lang_indexcommon,home_layout

关键是 实参home_index_index中没有逗号哈,所以用read方法没法替这个逗号哈,如果没法替就无法用逗号分割 成数组,那么就更无法接着执行下面的foreach了,整个逻辑直接完蛋了!我靠真不知这是怎么打印出来的

$s = 'abcd';$tmp = explode(',', $s);print_r($tmp);
Array(    [0] => abcd)

明明是没有逗号,却也产生了数组。你说这是为什么呢?

不要总说人家“吸毒”、“精神病”,一付愤世嫉俗的样子,这样会使自己变得浮躁
你只需动动手,就知道他为什么会这样写了
这么写好象不对吧! abcd中没有逗号,你用explode分害啥?

对!
你没看到你贴图中下图的3行是 explode 吗?

字符串中可能有逗号,也可能没有逗号
为了统一处理的方便,当然是假定他有了

用 explode 分割了就变成了数组,这样就可以在循环里处理了
至于循环体执行了一次还是几次就不必去管了

关键是 实参home_index_index中没有逗号哈,所以用read方法没法替这个逗号哈,如果没法替就无法用逗号分割 成数组,那么就更无法接着执行下面的foreach了,整个逻辑直接完蛋了!我靠真不知这是怎么打印出来的



我 #3 那么浅显的例子也没看懂吗?


关键是 实参home_index_index中没有逗号哈,所以用read方法没法替这个逗号哈,如果没法替就无法用逗号分割 成数组,那么就更无法接着执行下面的foreach了,整个逻辑直接完蛋了!我靠真不知这是怎么打印出来的



我 #3 那么浅显的例子也没看懂吗?
明白了,不过应该是推理出来的,因为php手册上也没有,所以我有点感悟,其实很多行业都有不可告人的潜规则,php也一样。

其实这里用逗号不是目的,目的是把这个字符串转为数组,而转为数组就必须分割,而分割却没有可分之外,一般初学者会想到用空白分,但是explode函数里面有一个潜规则,那就是用一个在该字符串中没有的符号去分这个字符串,是不会报错的,并且返回的是一个数组。这就是php潜规则之一,进而得出结论,用潜规则写代码的人都是装疯卖傻的人

是吗?手册中命名写到:
如果 separator 所包含的值在 string 中找不到,那么 explode() 将返回包含 string 单个元素的数组。

此处用别的号也行,你用文字分割也行$tmp = explode('我我我',$file);
所以更得出一个结论来了,如果你要想成为php大牛,你必须要熟练的知道和掌握及书写这种看上去象进过精神病院似的写法,但是可悲的是,绝大多数的php教程都没有这种潜规则介绍,真让人发指啊