public function getss() { $e = "tuti@@qq.com"; $res = filter_var($e, FILTER_VALIDATE_EMAIL); //var_dump($res); //匿名函数 function getapp($base) { return function ($child) use($base) { return $child + $base; }; } $f = getapp(120); $r = $f(200); var_dump($r); }
* test closure * !php % $argv[1] $argv[2] */ ////////////////////////////////////////////////////////// // 下面使用匿名函数产生了闭包 // 闭包的要点:闭包函数继承了定义它的父作用域的变量 // 下面的getapp函数的局部作用域,即闭包函数的继承的父作用域 // $base 即是闭包函数从其父作用域继承过来的参数,它会一直和闭包函数同在 // 而不用管定义它的作用域是否存在--即getapp() 函数生命周期是否存在 function getapp($base) { return function ($child) use($base) { return $child + $base; }; } $f = getapp($argv[1]); $res = $f($argv[2]); // 到这里闭包函数的父函数生命周期已经结束了, // 但闭包函数仍然存在,且它仍可以使用其父函数传递给它的参数$child // 虽然$child 应该随着getapp()的结束,应该被销毁的,这就是闭包的关键点 var_dump($res); // result:$argv[1]+$argv[2] ////////////////////////////////////////////////// // 下面是纯粹的匿名函数的使用,它没有产生闭包 // 匿名函数的使用不一定产生闭包 function get() { return function ($child) { return $child + 1; }; }