$value = Session::get('key', 'default_value');$value = Session::get('key', function () { return 'default_value';});上面代碼的意思就是根據session的key取得相應的值,當該key相應的值不存在時,返回默認值(default_value)。請問這兩種寫法有什么區別,第一種很自然能理解,第二種用匿名函數來返回的寫法,有什么特定的使用場合嗎?請不吝賜教!多謝!
3 回答

蕪湖不蕪
TA貢獻1796條經驗 獲得超7個贊
問你一個問題就知道什么場合用匿名函數了:
假如默認值也是事先不知道,需要事后計算出來的呢?
當然你也可以在調用此方法之前先將默認值算好再傳入第二參數,不過這樣會有這么一個問題,如果key存在,并不需要默認值的情況下,之前算默認值運行的代碼不是都浪費了嗎?但是匿名函數不會,匿名函數的萌點在于需要調用它的時候才會運行,你只不過是事先定義好它的運行流程而已。
另外你這個題目有點不太準確,你正文里提到的問題其實跟閉包沒什么關系哦

一只名叫tom的貓
TA貢獻1906條經驗 獲得超3個贊
session中保存的值可能是字符串、數組、類等各種數據類型,就算是單一數據類型,它表示的意義也存在多種可能,如一本書信息,一個用戶信息,一個銷量排行等,除此之外,返回一個默認值還有可能要處理一些邏輯、事務等等,在這種情況下,將處理邏輯作為參數傳入方法,可以方便的解決這類問題。
class Session{ public static function get(String $key, Closure $func) { // 取key的value,如果為空則調用匿名函數 return $func(); // 只專注于自己的業務(k-v),其它業務委托匿名函數處理。 } }
匿名函數是不需要定義函數名的,可以作為參數傳遞給其他函數, 通常用于回調函數。
- 3 回答
- 0 關注
- 125 瀏覽
添加回答
舉報
0/150
提交
取消