PHP开发中关于面向对象和函数式编程的思考

2014年09月05日 技术资料 3833 views 0

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


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


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


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


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

  1. /**

  2. * 取出所有分类

  3. *

  4. * @access public

  5. * @return array

  6. */

  7. function categorylist(){

  8. $categoryresult = $GLOBALS['db']->query(“select * from ebk5_category order by serialNum asc”);

  9. while($row = $GLOBALS['db']->fetchRow($categoryresult)){

  10. $arr[]=$row;

  11. }

  12. return $arr;

  13. }


  14. /**

  15. * 从数组中取出所有顶级分类

  16. *

  17. * @access public

  18. * @return array

  19. */


  20. function arr0(){


  21. $arr=categorylist();

  22. foreach ($arr as $k=>$v){

  23. if ($v[PARENT_ID]==NULL){


  24. $arr0[]=$v;

  25. }

  26. }

  27. }


  28. /**

  29. * 从数组中去除所有顶级分类

  30. *

  31. * @access public

  32. * @return array

  33. */

  34. function arr(){

  35. $arr=categorylist();

  36. foreach ($arr as $k=>$v){

  37. if ($v[PARENT_ID] == NULL){

  38. unset($arr[$k]);

  39. }

  40. }

  41. return $arr;


  42. }




关于函数式编程有专门的语言,比如Scala,Erlang。这些我了解不多,有时间需要好好学习一下。充充电。

👍好活当赏🧧