PHP函数总结

原创 2018-11-19 14:17:01 219
摘要:一 函数分为哪几类?    1. 普通函数:标准函数 使用function 在全局中声明的如下function demo(){     ..... }    2.匿名函数:将函数定义以值的方式赋值给一个变量,常用作闭包或者回调如下   &n

一 函数分为哪几类?

    1. 普通函数:标准函数 使用function 在全局中声明的如下

function demo(){
    .....
}

    2.匿名函数:将函数定义以值的方式赋值给一个变量,常用作闭包或者回调如下

    $demo = function(){
        .....
    }

    3.自调用函数:定义与执行同步完成如下    ps: php7以上才可以

(function(){
    .....
})();


二.函数参数分哪几类?

    1.必须参数:调用函数是必须传入参数,且顺序必须相同如:

function demo1($a,$b)   //形式参数 不要赋值
{
    return ($a+$b);
}
echo demo1(15,20),"<hr>";`    //35

    2.可选参数:可选参数必须与参数的默认值配合使用

function demo2($a,$b=30)   //形式参数 给个默认值  注意 如果有多个参数,有默认值的参数要写到参数列表的后面
{
    return ($a+$b);
}
//调用 先写必选参数 在写可选参数
echo demo2(20),"<hr>";          //20+b的默认值30 ===>20+30

    3.无参数:通过系统函数来获取参数,其实参数本质就是一个占位符如:

function demo3()   
{
    //函数来获取参数列表
    $a = func_get_arg(0);   //100
    $b = func_get_arg(1);   //40

    $num = func_num_args();    //获取参数个数
    $res = print_r(func_get_args(),true);   //func_get_args() 获取所有参数 返回一个数组
//    return '当前函数的参数数量'.$num.'个';    //5
    return '<pre>当前函数的参数有:'.$res.'</pre>';    //格式化输出参数
//    return ($a+$b);    //140
}
//调用
echo demo3(100,40,123,'asd zcz ','啊啊啊'),"<hr>";


.回调函数: 简单的说,在一个函数中调用另一个函数

    1.普通函数当做参数传入另一个函数中如下

function bigger($a,$b)
{
    //将较大的值返回
    return "$a 和 $b 中,较大的一方是".(($a>$b) ? $a : $b);
}
//创建另一个函数main() 
function main($bigger)  //参数可以是一个函数
{
    //这就叫回调,函数注入
    return $bigger(100,88);
}
//调用    将普通函数bigger名称 传入
echo main('bigger');

    2.将匿名函数注入到函数中

$bigger = function ($a,$b)
{
    //将较大的值返回
    return "$a 和 $b 中,较大的一方是".(($a>$b) ? $a : $b);
};
echo "<br>";
function main1($bigger)
{
    return $bigger(200,25);
}
echo main1($bigger),'<hr>';

    3.php还内置了两个函数:用来执行回调函数    call_user_func(),call_user_func_array() 如下        他的功能不仅限于函数,和函数功能类似的成员都可以使用 对象 类中方法.....

echo call_user_func('bigger',200,500);        //将参数以字符串的形式传入
echo '<hr>';
echo call_user_func($bigger,552,1000);        //将参数以字符串的形式传入
echo '<hr>';
echo call_user_func_array($bigger,[30,27]);    //将参数以数组的形式传入
echo '<hr>';
-----------------------------------------------------------------
class  Demo
{
    public static function getMethod()
    {
        return '方法是:'.__METHOD__;
    }
}
echo call_user_func(['Demo','getMethod']);
echo '<hr>';
echo call_user_func('Demo::getMethod');
echo '<hr>';
echo Demo::getMethod();

四. 匿名函数闭包

    1.在函数中调用一个匿名函数时会产生闭包

    2.当匿名函数当做一个函数参数传递给函数时会产生闭包

    3.当匿名函数当做函数返回值的时候 也就是一个函数返回一个匿名函数就会产生闭包

//匿名函数也有自己的作用域
$belle = '三叔';

$demo2 = function ($name)   //通过传参来使用外部变量
{
    return $name .'最爱的人是:陈文锦';
};

echo $demo1($belle),'<hr>';

匿名函数还可以用use关键字来访问参数列表外的数据如下

$man = '四叔';
$demo3 = function ($name) use ($man) //匿名函数可以用use关键字来访问参数列表外的数据
{
    return $name .'最爱的人是:'.$man;
};
echo $demo3('陈文锦'),'<hr>';

匿名函数就是一个普通的变量 ,变量的三个使用场景  1.局部变量,2.函数的参数,3.当做函数的返回值   那么匿名函数也可以使用在这三个使用场景

    1.匿名函数当做局部变量来使用 

$func1 = function (){
    $man = '张三丰';
    //在函数中声明一个匿名函数
    $test = function () use ($man){    //声明局部变量 值为一个匿名函数
        return $man. ',我被一个函数包住了,快来救我';
    };
    //调用,必须执行一下,才能形成闭包
    return $test();
};

    2.将匿名函数当做函数的参数来使用

$man = '张三丰';
$test = function () use ($man){        // 声明一个变量值为一个匿名函数(闭包)
    return $man. ',师傅,我被当做参数了!!!!';
};
$func2 = function (callable $func){    //将匿名函数传入函数中
    return $func();                    //调用
};
echo $func2($test),'<hr>';

    3.将匿名函数当做函数返回值来使用

$func3 = function (){
    $man = '张三丰';
    //在函数中声明一个匿名函数
    $test = function () use ($man){    //声明一个值为匿名函数的变量
        return $man. ',我被当做返回值了!!!';
    };
    //当做返回值    返回匿名函数的定义
    return $test;
};
//$func3() 返回值是一个匿名函数的定义 :$test
echo $func3()(),'<hr>';    //执行

所以闭包的两个生成条件:

  1.必须先定义一个匿名函数 

  2.必须要执行一次匿名函数来生成闭包函数


发布手记

热门词条