函数式编程

函数式编程

函数式编程的特点:
1.函数可以与其他数据类型一样进行传递赋值;
2.只用表达式,不用语句,每一步都是单纯的运算,而且都有返回值,函数式编程的动机是,为了处理运算,不考虑系统的读写,减少不必要的读写操作;
3.函数式编程,不能存在函数内部和外部的互动,函数需要保持独立,不能修改外部变量的值;
4.引用透明,函数运行不依赖外部变量或状态,只依赖与输入的参数
 
函数式编程的好处:
代码简洁,开发快速
函数式编程大量使用函数,减少代码的重复,开发速度快;
函数式编程接近自然语言,易于理解  函数式编程的自由度很高,可以写出很接近自然语言的代码;
很方便代码管理,函数式编程不依赖外界状态,故而不会对外界数据产生影响,有利于,单元测试和模块组合;
易于并发编程,不需要考虑死锁的问题;
代码的热升级,函数式编程不会影响其他;
 
 
 
将函数名进行传递 进而进行调用的编程思想
 
在php中,使用$fname() 这样的思路可以实现, 也可以 call_user_func('phpinfo');
 
使用这种方式之前需要先检测下类中是否有这个函数
  1. <?php
  2. /*
  3. 函数式编程
  4. 在php中,使用$fname() 这样的思路可以实现, 也可以 call_user_func('phpinfo');
  5. */
  6. classHSController{
  7. publicstaticfunction login()
  8. {
  9. echo "login in!!";
  10. }
  11. }
  12. $action=$_GET['action'];
  13. //先要检车下这个类中是否有这个方法 使用php的反射机制检查
  14. $reflectionClass=new reflectionClass('HSController');
  15. if(!$reflectionClass->hasMethod($action))//检查类中是否有该方法
  16. {
  17. echo $action.' is not found!';
  18. exit();
  19. }
  20. //检查该方法是否是静态方法
  21. $reflectionMethod=$reflectionClass->getMethod($action);
  22. if(!$reflectionMethod->isStatic())
  23. {
  24. echo $action.' is not a static function!';
  25. exit();
  26. }
  27. HSController::$action();
  28. ?>
 
php中闭包实现函数式编程思想
  1. <?php
  2. /*
  3. lambda表达式
  4. 在php 5.3之前
  5. 是使用 create_function('',);
  6. */
  7. create_function('$a','return addcslashes(trim($a));');
  8. //相当于构造一个下面的函数
  9. function lambda_1($a)
  10. {
  11. return addcslashes(trim($a));
  12. }
  13. //create_function 会创建一个 lambda_数字的一个临时函数
  14. //在php5.3 php 便开始真正的支持闭包 lambda也就更好用了
  15. $data=range(0,10);
  16. //更接近javascript的lambda语法
  17. $newData=array_map(function($v){
  18. $a=range(0, $v);
  19. return array_sum($a);
  20. }, $data);
  21. function outer()
  22. {
  23. $a=11;
  24. returnfunction()use($a){
  25. //闭包
  26. echo $a;
  27. };
  28. }
  29. $inner=outer();
  30. $inner();
  31. print_r($newData);
  32. ?>



posted on 2017-05-09 11:25  轻浮不韪  阅读(479)  评论(0编辑  收藏  举报