問題title可能起的有點大,我想請教大家的具體問題是
$value = Session::get('key', 'default_value');$value = Session::get('key', function () { return 'default_value';});
上面代碼的意思就是根據session的key取得相應的值,
當該key相應的值不存在時,返回預設值(default_value)。
請問這兩種寫法有什麼區別,
第一種很自然能理解,
第二種用匿名函數來返回的寫法,有什麼特定的使用場合嗎?
請不吝賜教!
多謝!
回複內容:
問題title可能起的有點大,我想請教大家的具體問題是
$value = Session::get('key', 'default_value');$value = Session::get('key', function () { return 'default_value';});
上面代碼的意思就是根據session的key取得相應的值,
當該key相應的值不存在時,返回預設值(default_value)。
請問這兩種寫法有什麼區別,
第一種很自然能理解,
第二種用匿名函數來返回的寫法,有什麼特定的使用場合嗎?
請不吝賜教!
多謝!
問你一個問題就知道什麼場合用匿名函數了:
假如預設值也是事先不知道,需要事後計算出來的呢?
當然你也可以在調用此方法之前先將預設值算好再傳入第二參數,不過這樣會有這麼一個問題,如果key存在,並不需要預設值的情況下,之前算預設值啟動並執行代碼不是都浪費了嗎?但是匿名函數不會,匿名函數的萌點在於需要調用它的時候才會運行,你只不過是事先定義好它的運行流程而已。
另外你這個題目有點不太準確,你本文裡提到的問題其實跟閉包沒什麼關係哦
session中儲存的值可能是字串、數組、類等各種資料類型,就算是單一資料類型,它表示的意義也存在多種可能,如一本書資訊,一個使用者資訊,一個銷量排行等,除此之外,返回一個預設值還有可能要處理一些邏輯、事務等等,在這種情況下,將處理邏輯作為參數傳入方法,可以方便的解決這類問題。
class Session{ public static function get(String $key, Closure $func) { // 取key的value,如果為空白則調用匿名函數 return $func(); // 只專註於自己的業務(k-v),其它業務委託匿名函數處理。 }}
匿名函數是不需要定義函數名的,可以作為參數傳遞給其他函數, 通常用於回呼函數。
對數組操作的時候可能會用到匿名函數比如
usort($array,function($itema,$itemb){ //code..});