2008年07月22日
[PHP] PHP 5.3 的 Lambda 和 closure ?
這篇也 Lag....這是前陣子的消息。
PHP 5.3 將有可能會有 Lambda (黏巴達?) 和 closure ,來源為 Request for Comments: Lambda functions and closures 這篇文章,所以以後 call_user_func 就不必再用蹩腳的字串來做為函式內容了。而且這是不是也表示 PHP 不但向 Java 靠攏,也開始向 JavaScript 靠攏了?
註:所以 Mark 剛剛跟我說 PHP 快變四不像了。
Lambda 語法如下:
function & (parameters) use (lexical vars) { body }
範例:
$lambda = function () { echo "Hello World!\n"; };
可以這樣用:
$lambda ();
call_user_func($lambda);
call_user_func_array($lambda, array());
所以 call_user_func 系列函式就可以用 Lambda 了。
進階的 Lambda 範例:
function replace_spaces ($text) {
$replacement = function ($matches) {
return str_replace ($matches[1], ' ', ' ').' ';
};
return preg_replace_callback ('/( +) /', $replacement, $text);
}
Closure 語法:
function (normal parameters) use ($var1, $var2, &$refvar) {}
範例:
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);
}
可以看到原來可以用 callback 的函式,應該都能接受 closure 。
其他就請參考來源文章囉。
相關文章
回應文章 
有這麼新的版本喔!我還不知道說!
紀錄起來!
Posted by ㄚ琪
at 2008年07月23日 08:55

這樣寫法的好處是什麼呢?
效率會快點嗎?
我很怕這種寫法, 除錯時會越來越難.
Posted by No4
at 2008年07月23日 13:21
@丫琪:
PHP 已經到 6.0 了,不過目前 5.3 以後的版本都還在開發中,建議使用 5.2.6 以前的版本。
@No4:
其實之後 Xdebug 應該會因應這些特色作改良,因此 Debug 上應該會還好。至於效率,我不是很確定。而好處你可以參考 Ruby 或 JavaScript 上,利用這些特色做出來的成品。
Posted by jaceju
at 2008年07月23日 14:13
