2011年7月11日 星期一

Advanced PHP - closure

PHP 在 PHP5.3 版新增了 closure 的支援。   因此你可以在 PHP 內定義 closure ,也就是所謂的 Anonymous Function

但在函式內,無法直接使用外部變數,若要使用外部變數,則需使用 use 敘述。



若要呼叫,直接將該變數當作函數呼叫即可
同時,如果需要修改外部變數,則可使用參照符號 (&)。

此外 call_user_func 也可用於呼叫 closure 。

至於 closure 相關的函數有 is_callable 。

is_callable 可判定某變數類型是否為函數,可傳入函數名稱字串,也可傳入 closure variable。

此外,可使用 array 來將 某 object 的 method 包裝起來:

$method = array( $object , 'method' );

其 $method 也可傳入 is_callable 做確認。


在 PHP5.3 之前,PHP4, PHP5 有提供函數 create_function 來建立 closure ,不過建立 closure 的方式相當骯髒,是將 Code 以類似 Eval 的方法,將程式碼作為字串,傳入 create_function 來建立 closure 。 可參考 create_function