Lambda функции и Closures са неща, който от доста време се надявам да ги има в PHP, и това вече е факт. Жалкото е че PHP5.3 и PHP6 ще има да се чака много време, докато започнат да се използват масово.
Lambda функцията изглежда така:
function & (parameters) use (lexical vars) { body }
Ето няколко примера:
function replace_in_array ($search, $replacement, $array) {
$map = function ($text) use ($search, $replacement) {
if (strpos ($text, $search) > 50) {
return str_replace ($search, $replacement, $text);
} else {
return $text;
}
};
return array_map ($map, $array);
}
като много се надявам това да може да се напише и така:
function replace_in_array ($search, $replacement, $array) {
return array_map(function ($text) use ($search, $replacement) {
if (strpos ($text, $search) > 50) {
return str_replace ($search, $replacement, $text);
} else {
return $text;
}
}, $array);
}
Също така има и нов “магически” клас метод __invoke:
class Example {
public function __invoke (){
echo "Hello World!\n";
}
}
$foo = new Example;
$foo();
Даже, вече го виждам как ще промени един мой клас за тестване на тагове – TagMatcher:
// сегашната версия $matcher = new TagMatcher($tag1); echo $matcher->match($tag2); // бъдещата версия $match = new TagMatcher($tag1); echo $match($tag2);
Също така има промени и по Reflection API. За повече информация:
http://wiki.php.net/rfc/closures
В заключение, ще кажа че синтаксиса на Lambda функциите и Closures е наистина добър, като много напомня на този в JavaScript и изглежда като нормална част от PHP. И че PHP с новите подобрения, плюс няколко PECL добавки като operator, classkit и runkit, и малко оптимизция става още по-мощен език.
