Closure for PHP

如其名,Closure——闭包,一个在JavaScript中随处可见的概念,产生并用于(并不准确的说辞)匿名函数( Anonymous functions ),但在PHP语言中有着概念上的些许区别:

  • PHP中的闭包有其实现的类,一个表示匿名函数的类(Class used to represent anonymous functions.):
Closure {
/* Methods */
private __construct( void )
public static Closure bind( Closure $closure, object $newthis [, mixed $newscope = "static" ] )
public Closure bindTo ( object $newthis [, mixed $newscope = "static" ] )
public mixed call ( object $newthis [, mixed $...] )
}
  • JavaScript中,匿名函数内部可以调用包含它的作用域中的变量,形成闭包。但在PHP中,闭包是类似上述代码的类,需要我们手动的将其与某些特定参数进行绑定,PHP中的匿名函数要调用包含它的作用域中的变量必须在function后使用use关键字。

在类Closure中,有上述的四个方法,下面对这四个方法进行详述:

  1. private __construct(void)
    不同于PHP中的其他类中的构造函数,这个函数的存在是为了阻止实例化此类的实例,当调用此方法时会产生E_RECOVERABLE_ERROR错误。当匿名函数产生的时候,PHP会同时为其实例化一个Closure的实例。
  2. public static Closure bind( Closure $closure, object $newthis [, mixed $newscope = "static" ] )
    此方法与下述方法类似,参照下述函数的说明。
  3. public Closure bindTo ( object $newthis [, mixed $newscope = "static" ] )
    函数用于复制当前的闭包,并将其与特定的需绑定对象和作用域进行绑定。其中$newthis参数重新指定了匿名函数内部的$this变量所指定的对象,$newscope指定了某个类,其中的protectprivate参数是对此匿名函数可见的,就如同匿名函数是此指定的类中的函数。
  4. public mixed call ( object $newthis [, mixed $...] )
    调用此闭包,即此匿名函数,并在调用时将此匿名函数与特定的参数进行绑定,参数说明如上所述。

下述简单的Closure使用例子:

val = $val;    }    
   function getClosure() { 
       //returns closure bound to this object and scope
        return function() { return $this->val;};
    }
}

$ob1 = new A(1);
$ob2 = new A(2);
$cl = $ob1->getClosure();
echo $cl(), "\n";
$cl = $cl->bindTo($ob2);
echo $cl(), "\n";?>

输出结果如下:

1
2

你可能感兴趣的:(Closure for PHP)