8,PHP函数式编程探索
2016-12-23 本文已影响142人
陈钢镚学财
前言
函数式编程,一个对许多刚开始接触php的人来说,都可能是一个比较生疏的概念。但不得不说,现在越来越多语言都对这个概念提供了程度不一的支持。最典型的,就是javascript。
现在的PHP也支持,但毕竟它不是完全的运算语言,他需要处理很多其他逻辑,所以对函数式编程并无法提供完全支持。
** 就本人对PHP的函数式编程理解,写此文章,作为笔记,若有错误之处,恳请斧正。**
目录
- 简单理解函数式编程
- PHP对函数式编程的实现
- 动态调用函数
- 具体实现
简单理解函数式编程
函数式编程.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 一起探讨
本文来自半醒的狐狸博客