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