• Web开发编程其实更倾向函数式编程

    PHP函数式编程也很合适
    服务器君一共花费 15.226 ms 进行了 3 次数据库查询,努力地为您提供了这个页面。
    广告很萌的
    1. Chapter: PHP与函数式编程
      1. 1. Web开发编程其实更倾向函数式编程

    PHP函数式编程概况

    PHP支持第一类函数(first-class function),即函数可以赋值给变量,包括用户自定义的函数和内置函数,然后动态调用它。 函数可以作为参数传递给其他函数(即高阶函数),也可以作为函数返回值返回。

    PHP支持函数递归调用,即函数自己调用自己,不过在实际的PHP代码中,我们更喜欢用迭代来代替递归。

    2009年发布的PHP 5.3开始引入支持闭包的匿名函数。

    PHP 5.4支持把闭包绑定到对象作用域,并改善其可调用性,从而可以在大部分场景中使用匿名函数替代普通函数。

    • 虽然说 PHP 是一门命令式编程语言,但是它也具备了函数式编程的一些特征,这使得我们可以利用 PHP 进行函数式编程的可能。要不,以后我们写 PHP 都用函数式编程?这可不是开玩笑,而且这看起来还挺酷的。

    为什么要学习PHP的函数式编程?

    函数式编程最大的特点之一就是摒弃了数据与状态的计算模型,同时也就避免了诸如作用域等细节给我们带来的副作用。

    实际上对于熟悉过程式编程的人来说,函数这个概念并不难理解,我们经常把对于数据和状态的处理封装为函数去隐藏其中的复杂;而函数式编程范式就是把函数提升为基本的编程要素,从语言设计的层面上着眼于函数本身,消除对数据和状态进行处理的过程。

    当然,函数式编程还有其他的特点,只是和面向对象式编程做比较的话,前面说的那些是比较本质性的。对于应用场景来说函数式编程并不“挑食”,不过考虑到它的一些特性(如代码热升级等),函数式编程特别适用于那些需要持续运行的应用。例如Erlang是爱立信为了管理电话系统而开发的,电话系统的升级当然是不能停机的。

    其实函数式编程的优势,在前面的 chapter 中已经探讨得很清楚了,读者可以自己去前面章节了解下。

    “函数式编程跟Web应用开发非常的匹配。Web应用接收一个HTTP请求,生成一个HTML返回结果。这应当被认做是一个从请求到页面的函数式功能。”

    实现这些功能的代码本质上反映的就是函数式的风格。我们并没有用真正的对象把应用程序的状态保存在内存里、用它们来实现应用逻辑操作,我们使用的是数据库来保存应用程序的状态,整个的代码基本上就是一个巨大的,复杂的函数式功能编码,它来管理特定数据流的走向:数据库或用户。

    从这些讨论我们能得到什么?

    狂热的强制使用面向对象的风格、对Web应用使用复杂的架构未必总会有好处。你不一定就能从这种架构方式中获得有价值的好处,但从性能和日后维护的角度看,它们却能使你的应用过于复杂和效能低下。我们必须针对每个项目的各自情况来掂量采用某种方式的好处和坏处。

    当一个程序员编写一个Web应用程序,如果突然代码中显示出了函数式编程风格的印记时,不要马上批评和嘲笑他。也许他是特意这样做的。也许这是一种敏锐的感觉到Web编程本身就是天生的函数式编程的潜意识表现。

    通过我自身编程实践经验感觉用PHP开发WEB应用,与前端业务逻辑和HTML生成的相关代码应该采用函数式编程的方法进行编码,一般不建议采用面向对象的方法。与底层数据交互以及其他一些稳定的组件可以采用面向对象的方式编写,方便调用和修改。

更多 推荐条目

Welcome to NowaMagic Academy!

现代魔法 推荐于 2013-02-27 10:23   

本章最新发布
随机专题
  1. [软件工程与项目管理] 浏览器与CSS渲染技巧 2 个条目
  2. [Python程序设计] Tornado表单处理 3 个条目
  3. [PHP程序设计] 对输入文件类型的检测 1 个条目
  4. [PHP程序设计] Nginx基本操作释疑 7 个条目
  5. [软件工程与项目管理] 浏览器的CSS解析 7 个条目
  6. [软件工程与项目管理] 开始使用Git 3 个条目
  7. [Python程序设计] 从PHP到Python 3 个条目
  8. [移动开发] Android根基概念Context 8 个条目
  9. [智力开发与知识管理] 信息的类型与结构 9 个条目
  10. [Python程序设计] Django Web环境配置 2 个条目
  11. [移动开发] Android 网络通信框架Volley 1 个条目
  12. [PHP程序设计] httpd.conf设置相关 3 个条目
窗口 -- [资讯]