美文网首页PHP的学习
8,PHP函数式编程探索

8,PHP函数式编程探索

作者: 陈钢镚学财 | 来源:发表于2016-12-23 18:37 被阅读142次

    前言


    函数式编程,一个对许多刚开始接触php的人来说,都可能是一个比较生疏的概念。但不得不说,现在越来越多语言都对这个概念提供了程度不一的支持。最典型的,就是javascript。

    现在的PHP也支持,但毕竟它不是完全的运算语言,他需要处理很多其他逻辑,所以对函数式编程并无法提供完全支持。

    ** 就本人对PHP的函数式编程理解,写此文章,作为笔记,若有错误之处,恳请斧正。**

    目录


    1. 简单理解函数式编程
    • PHP对函数式编程的实现
    1. 动态调用函数
    • 具体实现

    简单理解函数式编程


    函数式编程.png

    PHP对函数式编程的实现


    需要注意一点,PHP本身就不是函数式编程的语言,只是提供了部分支持。所以,在PHP中,并没有“函数类型”的概念,只有一些array、object、int、string等。

    1. 动态调用函数


    一般来说,PHP动态调用函数有两种,可变函数与回调函数

    • 可变函数
    function dblog(){
            echo "dblog";
    }
    $funcName = 'dblog';
    $dblog(); // 将执行dblog函数
    
    • 回调函数
    function dblog(){
            echo "dblog";
    }
    call_user_func('dblog'); // 将执行dblog函数
    // 回调函数有很多,不仅仅只有这个
    

    由上可见,PHP中动态调用,仅以字符串作为标志,并非以函数引用为区分,所以当出现两个函数同名时,这就乱套了。

    实际上,PHP的函数的作用域都是全局,是不允许在运行时重定义方法的,它与javascript不一样。

    2. 具体实现


    <?php 
        /**
         * 函数式编程
         */
        
        // 自然语言
        function  demo(){
            $dec=function(){
                $add=function(){
                    return 1+2;
                };
                return $add()*3;
            };
            return $dec()-4;
        }
        echo call_user_func("demo");
        echo '<hr>';
    
        // 函数赋值:将函数存在一个变量引用中
        $add=function($i){
                echo $i+2;
            echo "<br>";
        };
    
        $add(100);
        echo "<hr>";
    
        // 匿名函数
        $newArray=array(1,2,3,4,5,6,7);
        array_walk($newArray,function($i){
                echo $i+2;
            echo "<br>";
        });
        echo "<hr>";
    
        call_user_func(function(){
            echo "ni ming han shu";
            echo "<hr>";
        });
    
        $a1 = array(1,2,3,4);
        $a2 = array(5,6,7,8);
    
        // 同时把$a1和$a2的值传入匿名函数中
        array_map(function($i,$j){
            echo ++$i;
            echo "--";
            echo ++$j;
            echo "<hr>";
        }, $a1,$a2);
    
        // 闭包
        $a = 1;
        call_user_func(function() use(&$a){ // 这里意思是把外部的$a导入函数内部,则可以在内部使用,如果想要影响外部变量,则加上取址符
            echo $a++;
        });
        echo "<hr>";
        echo $a; // 输出还是 1
        
     ?>
    

    结语

    若有大神路过,若有不对之处,万望指出!欢迎加技术交流QQ群 429071029 一起探讨
    本文来自半醒的狐狸博客

    相关文章

      网友评论

        本文标题:8,PHP函数式编程探索

        本文链接:https://www.haomeiwen.com/subject/edchvttx.html