PHP的学习

8,PHP函数式编程探索

2016-12-23  本文已影响142人  陈钢镚学财

前言


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

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

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

目录


  1. 简单理解函数式编程
  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 一起探讨
本文来自半醒的狐狸博客

上一篇下一篇

猜你喜欢

热点阅读