ラムダコンピューティングとクロージャ

2007年の終わりに、PHP用のラムダ関数を追加した(ただしクロージャは追加しなかった)パッチが追加されました。 メーリングリストでの議論の中で、クロージャーのサポートがなければ、クロージャーをPHPに追加する必要はないと判断されました。
ただし、このトピックへの関心は、Christian Seilerによる初期パッチとDmitry Stogovによる新しいパッチのリリースに大きな変化をもたらしました。

その結果、PHPにはクロージャーとラムダ関数があります(5.3)




関数getAdder($ x){
リターン関数($ y)使用($ x){
//または:字句$ x;
return $ x + $ y;
};
}
// ---- OOP

クラスの例{
プライベート $検索;
パブリック関数__construct($ search){
$ this-> search = $ search;
}
パブリック関数setSearch($ search){
$ this-> search = $ search;
}
パブリック関数getReplacer($置換){
リターン関数($テキスト)使用($置換){
return str_replace($ this-> search、$ replacement、$ text);
};
}
}
$ example = new Example( 'hello' );
$ replacer = $ example-> getReplacer( 'goodbye' );
echo $ replacer( 'hello world' ); //さよならの世界
$ example-> setSearch( 'world' );
echo $ replacer( 'hello world' ); //こんにちはさようなら

クラスの例{
パブリック関数__invoke(){
echo "Hello World!\ n" ;
}
}
$ foo = new例;
$ foo();

// ---リフレクション

クラスの例{
static function printer(){echo "Hello World!\ n" ; }
}
$ class = new ReflectionClass( 'Example' );
$ method = $ class-> getMethod( 'printer' );
$クロージャー= $ method-> getClosure();
$クロージャー(); *このソースコードは、 ソースコードハイライターで強調表示されました。


PHP 5.3のリリースを楽しみにしています




ソース:


UPD: ErlangECMAScriptRubyなどの言語のドキュメントで、これらの革新の利点について詳しく知ることができます。

以前に同様の機能を実装することが可能でした。それは単なる「構文糖」です

Source: https://habr.com/ru/post/J30126/


All Articles