匿名関数としても知られる
クロージャー、匿名関数は、php5.3で導入されました。 匿名関数とは、名前が定義されていない関数です。これを念頭に置いておけば、無名関数の定義を理解できるようになります。
PHP Closure クラスは、以前に PHP定義済みインターフェイス で紹介されましたが、これはインターフェイスではなく、内部の最終クラスです。 Closure クラスは匿名関数を表すために使用され、すべての匿名関数は Closure クラスのインスタンスです。
$func = function() { echo 'func called'; }; var_dump($func); //class Closure#1 (0) { } $reflect =new ReflectionClass('Closure'); var_dump( $reflect->isInterface(), //false $reflect->isFinal(), //true $reflect->isInternal() //true );
Closure クラスの構造は次のとおりです:
Closure::construct — インスタンス化を禁止するために使用されるコンストラクター
Closure::bind — クロージャをコピーし、指定された $this オブジェクトと Class スコープをバインドします。
Closure::bindTo — 現在のクロージャ オブジェクトをコピーし、指定された $this オブジェクトとクラス スコープをバインドします。
$this オブジェクトとスコープをバインドする例を見てください:
class Lang { private $name = 'php'; } $closure = function () { return $this->name; }; $bind_closure = Closure::bind($closure, new Lang(), 'Lang'); echo $bind_closure(); //php
さらに、PHP は マジック メソッド invoke() を使用してクラスをクロージャに変換します:
class Invoker { public function invoke() {return METHOD;} } $obj = new Invoker; echo $obj(); //Invoker::invoke
以上がPHPクロージャクラスの使い方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。