php – 匿名函數 – 傳遞參數與繼承變數適合的使用場景
匿名函數(Anonymous functions、匿名函式、閉包)可允許創建一個沒有固定名稱的函數,雖然可以用在臨時使用,但其實比較常用在回調(回呼、callback)的狀況。
傳遞參數 (傳值呼叫 Call By Value)
$example = function ($time){ return $time; }; echo $example('08:01'); // 輸出 08:01
繼承變數
這跟傳遞參數的效果蠻似的,使用的時機差別,可以參考最後的類別應用。
$name = 'Jason'; $message = 'Hello'; // 繼承 $name, $message $example = function () use ($name, $message) { return "{$name}:{$message}"; }; echo $example(); // 輸出 Jason:Hello
參考 (傳址呼叫 Call By Reference)
$name = 'Jason'; $message = 'Hello'; // 繼承 $name, $message $example = function () use ($name, &$message) { return "{$name}:{$message}"; }; $message = 'Good Morning'; echo $example(); // 輸出 Jason:Good Morning
傳值+繼承變數+參考
$name = 'Jason'; $message = 'Hello'; // 繼承 $name, $message $example = function ($time) use ($name, &$message) { return "{$name}:{$message} - {$time}"; }; $message = 'Good Morning'; echo $example('08:01'); // 輸出 Jason:Good Morning - 08:01
在類別的應用
class Chat { public function say($callback) { $time = '08:01'; return $callback('08:01'); } }
$name = 'Jason'; $message = 'Hello'; $chat = new Chat;
echo $chat->say(function () use ($name, $message){ return "{$name}:{$message}"; }); // 輸出 Jason:Hello $message = 'Good Morning'; echo $chat->say(function () use ($name, &$message){ return "{$name}:{$message}"; }); // 輸出 Jason:Good Morning echo $chat->say(function ($time) use ($name, &$message){ return "{$name}:{$message} - {$time}"; }); // 輸出 Jason:Good Morning - 08:01
- $time 是由匿名函數內部傳遞到外部
- $name 與 $message 由匿名函數外部傳遞到內部
我想這個就是傳遞參數與繼承變數適合的使用場景。