PHP 5.3版本跟随了很多新特性,其中比较惹眼的特性之一就是支持了闭包。文章将使用PHP 5.3 以及其他语言提供的闭包功能,用于展示如何“客观的”操作迭代数组。在开始之前先说明下,本例子仅仅是阐明观点,并没有考虑性能等其他方面的因素。
“货比三家” 用个简单的例子开始,有下面个数组:
需要找出数组中大于15的项。那么,不考虑闭包的情况下,我们或许会这样写:
如果语言本身有闭包支持的,那么或许会这样写(Groovy 语言)
或者使用Scala语言:
译注:Javascript 1.6 的话会是如下:
因为循环操作已被抽象起来,所以可以看到 Groovy 、Scala (以及 Javascript) 都很漂亮得用一行就可以搞定。当然,如果使用 PHP5.3 的闭包,也可以做到
PHP在这方面使用了比Scala更多的字符,但对比先前的例子,它更简短并且能更好得阅读。 顺便说下,上面的PHP代码实际上是使用了Lambda解析式,并不是个真正的闭包,这个并不是我们目前关注的重点。目前看来感觉都还不错,那么我们再的题目增加点难度:找到所有大于15的项, 然后乘以2再加上作用域中的的某个变量值以后再返回。 Groovy的实现:
Scala的实现:
Javascript 的实现:
PHP的实现:
光从代码量方面,现在看起来PHP与其他语言有出入了。先抛开代码字面上本身的审美不谈,上面的PHP代码还有个额外的问题。例如,如果需要使用数组的键而非值作比较,怎么办?是的,上面的代码就办不到了。同时,从语法角度上说,上面的代码非常难以阅读。返璞归真,这时还是得返回老土的思路去解决问题:
这样看起来又很清楚了。但这个时候你或许又会迷惑了:“那还瞎折腾啥,这不就是个数组操作吗?”。是的,好戏还在后头。这个时候该让 PHP 的某些高级特性出场,来搞定这看似有自残倾向 的“无聊问题”。 (责任编辑:admin) |