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

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

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

萬千封印
TA貢獻1891條經驗 獲得超3個贊
對數(shù)組操作的時候可能會用到匿名函數(shù)比如
usort($array,function($itema,$itemb){ //code.. });
- 3 回答
- 0 關注
- 137 瀏覽
添加回答
舉報
0/150
提交
取消