匿名函数PHP官网是这么定义的:

匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值。

1.作为回调函数参数的用法

示例1.

<?php 
	//把字符串中符合这个正则匹配的替换成匿名函数中返回的值
	echo preg_replace_callback('/(\d{1})([a-z]{3,})/', function ($match) {
			return $match[1].strtoupper($match[2]);
	}, '345aaaaa86rrr07aaa');

结果:

345AAAAA86RRR07AAA

2.匿名函数赋值给变量

闭包函数直接赋值给变量,PHP 会自动把此种表达式转换成内置类 Closure 的对象实例。把一个 closure 对象赋值给一个变量的方式与普通变量赋值的语法是一样的,最后也要加上分号

示例2.

$testclosures = function($name) {
		echo 'hello '.$name;
};  //此处必须加上分号

$testclosures('vilay');

结果:

hello vilay

3.从父作用域继承变量

闭包可以从父作用域中继承变量。 任何此类变量都应该使用 use关键字传递进去。

示例3.1(未使用use):

$name = 'vilay';  //父作用域变量

$testclosures = function() {
		echo 'hello '.$name;
};

echo $testclosures();

结果:

Notice: Undefined variable: name in 
hello

示例3.2(使用use继承父作用域变量):

$name = 'vilay';
$testclosures = function() use ($name) {
		echo 'hello '.$name;
};

echo $testclosures();

结果:

 hello vilay

示例3.3(在匿名函数定义的时候,继承的父作用域变量的值就已经传递过去,而不是在匿名函数调用的时候):

$name = 'vilay';
$testclosures = function() use ($name) {
		echo 'hello '.$name;
};

$name = 'world';  //继承的父作用域变量在函数定义的时候,已经传递过去,因此此处设置变量值无效,结果仍是 hello vilay,而不是hello world
echo $testclosures();

结果:

hello vilay

示例3.4(通过引用继承父作用域的变量):

$name = 'vilay';
$testclosures = function() use (&$name) {
		echo 'hello '.$name;
};
echo $testclosures();  //此处结果应为:hello vilay

$name = 'world';
echo $testclosures(); //此处结果应为:hello world  由于使用了引用,改变了父作用域的变量的值,映射到了函数调用里面

结果:

hello vilayhello world

示例3.5(使用常规的参数):

$name = 'vilay';
$testclosures = function($args) use ($name) {
		echo $args.', '.$name;
};

$testclosures('ninhao');

结果:

ninhao, vilay