PHP lambda 與 閉包

來源:互聯網
上載者:User
lambda、

我自己的理解,lambda就是把方法名儲存到一個變數裡面去調用方法,典型的create_function所返回的就是lambda方法。

1 $newfunc = create_function('$a', 'echo "what u put in is " . $a;');2 $newfunc('aaaaa');

更簡單地可以自己去寫lambda方法的名稱,然後用以這種形式去調用。

1 function dump($a){2      var_dump($a);3 }4 $a = 'dump';5 $a('321');

閉包、

這裡單單從文法上說一下PHP的閉包,考慮下面的代碼:

 1 class ClosureTest{ 2      public $multiplier; 3      public function __construct($multilier){ 4           $this->multiplier= $multilier; 5      } 6   7      public function getClosure(){ 8           $self = $this; 9           return function($number) use($self) {10                return $number * $self->multiplier;11           };12      }13 }14 15 $test = new ClosureTest(10);16 $x = $test->getClosure();17 echo $x(8);18 $test->multiplier= 11;19 echo $x(8);

最後結果為:8088.

必須用到use向閉包中傳值,否則在調用時將提示變數未被定義的Notice。

閉包無法直接傳遞$this指標,所以這裡先將$this儲存在了$self中。

還有一點代碼中沒有體現出來,通過use傳類成員到閉包中必須通過引用傳遞,否則在後來修改改成員的值後比包中的值不會被改變。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.