php - 在 PHP 中编写更少的类 Java 对象和更多类似于 Clojure 的函数式编程原则的代码,我应该遵循什么原则?

标签 php functional-programming clojure

我是在不久前接触到 Clojure 的,虽然我还没有完全理解它的所有概念,但它给了我一个替代 Java 和 PHP 的 OO 的机会,我真的很想转向。我认为 Clojure 的系统是我的理想。我知道我想让它尽可能多地影响我的 PHP 编码风格。

我真的不喜欢 PHP 中的 OO,我讨厌样板文件的数量和它似乎经常导致的隐藏的复杂性。同时,我可以看到封装的好处,其中您拥有多位数据,这些数据具有修改自身的能力。也许使用一阶函数是允许封装的主要方式,但除此之外如何将面向对象的好处转化为函数式编程?

我现在遇到的部分问题是如何处理一组相关的函数,否则这些函数可能会被分组到一个类中,以一种合理的方式使它们对彼此有用。

最佳答案

根据爱德华·加森 (Edward Garson) 在“每个程序员都应该知道的 97 件事”一书中的一篇题为“应用函数式编程原则”的文章,他将其归结为:

引用透明度 http://en.wikipedia.org/wiki/Referential_transparency_(computer_science)

我认为任何 OO 语言都可以在某种程度上用函数式风格编写,我认为最好的思考方式是始终返回一些东西。如果你改变一个数据结构,返回一个应用了突变的数据结构的副本,不要改变原始数据结构。如果您需要更改对象的状态,请非常明确地说明这样做。最后,不要太具体,为你的方法编写单元测试,因为它会迫使你编写更多更专注于意图的方法,当你从这些方法中获得返回时,它们更容易测试。

关于php - 在 PHP 中编写更少的类 Java 对象和更多类似于 Clojure 的函数式编程原则的代码,我应该遵循什么原则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3393213/

相关文章:

javascript - 如何加快网页加载时间(CRON?在后台加载 API 调用?)

php - 我如何将这两个 MySQL 查询连接在一起

clojure - 使用带有 nrepl 的替代 eval

coding-style - 一般如何知道何时在 Clojure/Lisp 中换行?

error-handling - 如何编写 Clojure 线程宏?

php - 获取表名

javascript - jQuery.ajax 替换 PHP 代码

Clojure:使用多个参数的函数进行过滤

javascript - 函数式编程传递依赖

java - flatMap 的方法级通用类型