關於PHP的匿名函數和閉包

來源:互聯網
上載者:User
問題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..});
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.