Пример #1
0
 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);
 }
Пример #2
0
*  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;
    };
}