PHP匿名函数(Anonymous functions),又称为闭包(Closure)

xiaohai 2018-11-30 22:27:01 1150人围观 标签: PHP  闭包 
简介在学习Laravel核心代码的时候,在容器注册的过程中,看到了Closure。平时在使用PHP的过程中,自己使用闭包还是比较少的,所以本文将介绍下PHP的闭包Closure。

  PHP的闭包(Closure),其实也叫匿名函数。可以参考PHP的官方文档:http://www.php.net/manual/zh/functions.anonymous.php 匿名函数就是创建一个没有名称的函数,主要作为回调函数来进行使用。匿名函数目前是通过 Closure 类来实现的,需要学习Closure类的请前往:http://php.net/manual/zh/class.closure.php

基本使用

1、闭包函数作为变量的值

//定义一个匿名函数,作为一个变量的值 $func = function () { return 'Hello World'; }; //PHP 会自动把此种表达式转换成内置类 Closure 的对象实例 var_dump($func instanceof Closure);//结果输出:true,说明匿名函数目前是通过Closure 类来实现的 echo $func();//结果为 Hello world

2、闭包函数也可传递参数

//定义一个含有参数的匿名函数 $func = function ($string) { return $string; }; echo $func('Hello');//结果为:Hello echo $func('World');//结果为:World

3、闭包函数可以从作用域中继承变量,但是必须使用use语言结构传递进去

$param = 'hello'; //在使用$param的时候,前面必须先定义该变量,否则会提示:Undefined variable: param $func = function () use ($param) { return $param; }; echo $func();//输出hello //这里改变param的值 $param = 'world'; echo $func();//输出hello,说明param值的改变不会对闭包函数中的值进行修改,如果需要对其进行修改,就需要传递引用 $param = 'Hello'; $func1 = function () use(&$param){ return $param; }; echo $func1();//输出Hello $param = "World"; echo $func1();//输出World

4、回调函数

//定义一个接收参数为闭包函数的方法 function testCallBack(Closure $callback) { return $callback(); } $func = function () { return 'Hello World'; }; //传递定义好闭包函数的变量进去 echo testCallBack($func);//输出:Hello World //直接传递闭包进去 echo testCallBack(function (){ return 'Closure'; });//输出:Closure