PHP 快速導覽 - 無名函數

無名函數 (anonymous function) 是在 PHP 5.3 及 5.4 加入的新功能,用以設置無須指定名稱的函數 (function) ,例如寫在函數的參數列 (parameter list)

<?php
echo preg_replace_callback('~-([a-z])~', function ($match) {
    return strtoupper($match[1]);
}, 'there-is-no-spoon');

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:fun11.php
    功能:示範 PHP 程式 
    作者:張凱慶
    時間:西元 2013 年 2 月 */
?>


preg_replace_callback() 會將第三個參數 (parameter) 'there-is-no-spoon' 以第一個參數的正規表示式,然後交給第二個參數處理,這裡第二個參數就是個無名函數
echo preg_replace_callback('~-([a-z])~', function ($match) {
    return strtoupper($match[1]);
}, 'there-is-no-spoon');


執行結果如下



也可以直接用變數 (variable) 設置無名函數,例如
<?php
$a = function($n) {
    echo "$n\n";
};

$a('There is no spoon.');
$a('Choice. The problem is choice.');

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:fun12.php
    功能:示範 PHP 程式 
    作者:張凱慶
    時間:西元 2013 年 2 月 */
?>


注意,最後結尾的大括弧要有分號
$a = function($n) {
    echo "$n\n";
};


執行結果如下



中英文術語對照
無名函數anonymous function
函數function
參數列parameter list
參數parameter
變數variable


您可以繼續參考
函數


相關目錄
回 PHP 快速導覽
回 PHP 教材
回首頁


參考資料
http://www.php.net/manual/en/functions.anonymous.php

2 則留言:

sandfresh 提到...

對這篇有幾個疑問,正則式~-([a-z])~
前後加 ~-,~是什麼意思呢?去看正則規則都沒看到這種寫法。
strtoupper不是把字串轉成大寫,怎麼只有後面的單字首字母轉成大寫呢?

Kaiching Chang 提到...

有關正規表示式中的 ~ ,那是種 delimiters ,請參考 http://www.php.net/manual/en/regexp.reference.delimiters.php

另外只有以字串中的第一個字元當 strtoupper() 的參數唷

^_^