PHP>v5.3闭包函数,闭包函数没有函数名称,直接在function()传入变量即可 使用时将定义的变量当作函数来处理
匿名函数也叫闭包函数(closures允许创建一个没有指定没成的函数,最经常用作回调函数参数的值。
闭包函数没有函数名称,直接在function()传入变量即可 使用时将定义的变量当作函数来处理。
闭包内部函数使用了外部函数中定义的变量.在PHP新开放的闭包语法中, 我们就是用use来使用闭包外部定义的变量的。
正常函数:
function cl($name){ return sprintf('hello %s',$name); }
打印:
echo cl('world');
结果:hello world
匿名函数:
$cl = function($name){ return sprintf('hello %s',$name); }; echo $cl('world');
结果:hello world
打印$cl 类型
object(Closure)#1 (1) { ["parameter"]=> array(1) { ["$name"]=> string(10) "" } }
直接通过定义为匿名函数的变量名称来调用
echo preg_replace_callback('~-([a-z])~', function ($match) { return strtoupper($match[1]); }, 'hello-world');
结果:helloWorld
使用use
$message = 'hello'; $example = function() use ($message){ var_dump($message); }; echo $example();
结果:string(5) "hello"
带参数:
$message = 'hello'; $example = function ($data) use ($message){ return "{$data},{$message}"; }; echo $example('world');
结果:world,hello
闭包不会改变外部变量
$message = 'hello'; $test = function () use ($message){ var_dump($message); $message = 'Hi……'; }; $test(); $message = 'Ni Hao!'; $test();
结果:
string(5) "hello" string(5) "hello"