php匿名函数和闭包

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php匿名函数和闭包相关的知识,希望对你有一定的参考价值。

一,匿名函数

 一个没有名字的函数,使用function定义

<?php

$fun = function($a,$b)
{
	return $a+$b;	
};

echo $fun(1,2);//输出3

  

 

二,闭包函数

函数里面定义函数,子函数使用了父函数的变量,就是闭包,使用关键字use使用父函数的局部变量

(1)

<?php

function one()
{
	$a = 10;
	$b = 20;
	$fun = function()use($a,$b)
	{
		$a++;
		$b++;
		echo "{$a} {$b}";	
	};
	$fun();//输出11,21
	echo "{$a} {$b}";//输出10,20	
}
one();

 

(2)使用父函数局部变量的引用

<?php

function one()
{
	$a = 10;
	$b = 20;
	$fun = function()use(&$a,&$b)
	{
		$a++;
		$b++;
		echo "{$a} {$b}";	
	};
	$fun();//输出11,21
	echo "{$a} {$b}";//输出11,21	
}
one();

(3)子函数作为父函数的返回  

<?php

function one()
{
	$a = 10;
	$b = 20;
	$fun = function($c)use(&$a,&$b)
	{
		return $a+$b+$c;
	};
	return $fun;
}
$fun = one();
echo $fun(1);//输出31

(4)子函数作为父函数的返回,父函数的局部变量所在栈区的资源不释放

<?php

function one()
{
	$a = 10;
	$b = 20;
	$fun = function($c)use(&$a,&$b)
	{
		$a++;
		return $a+$b+$c;
	};
	return $fun;
}
$fun = one();
echo $fun(1);//输出32
echo $fun(1);//输出33

  

  

  

以上是关于php匿名函数和闭包的主要内容,如果未能解决你的问题,请参考以下文章

浅析PHP中的闭包和匿名函数

转:php中的匿名函数和闭包(closure)

php匿名函数和闭包

php匿名函数和闭包函数及use关键字传参及Closure匿名函数类

PHP 中的闭包函数和匿名函数

php的闭包