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

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などの言語のドキュメントで、これらの革新の利点について詳しく知ることができます。



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



All Articles