PHP - 閉包Closure和lambda function

     如今的語言沒有閉包簡直都很差意思說出來。javascript

     想要了解閉包是什麼,那麼就必須知道匿名函數。其實看起來他們其實差很少一個意思。php

     見php RFC一句話:java

  End of 2007 a patch was proposed that would add lambda functions( but without closures) to PHP. During the discussion on the mailing list, several people suggested that without support for closures, lambda functions are not useful enough to add them to PHP. This proposal describes a viable method of add lambda functions with closure support to PHP.閉包

     大概意思是,很早之前PHP只能使用匿名函數。可是呢沒有閉包的匿名函數等於沒什麼用處,因此後來就加上了閉包。ide

1. 匿名函數有什麼做用呢?函數

lambda functions allow the definition of throwaway functions that are not used anywhereoop

 也就是說,匿名函數的做用就是可以簡便快速的寫那些只用一次的函數。this

 若是沒有匿名函數,可能會出現以下狀況:spa

 

     若是有的話,我想大部分人都會直接寫:指針

return preg_replace_callback('//', funciton($match) {xxx},$text)

     這個就是匿名函數的做用。不過我的見解: 有了匿名函數以後,變量至關於有了CallBack這個類型。其實對於之前的php是一個比較大的改動,咱們能夠直接引用函數。我是這麼理解的。

 2. Closures閉包

 Closures provide a very useful tool in order to make lambda functions even more useful.

     閉包使得匿名函數更有做用,總的來講就是給匿名函數提供了一個訪問父級上下文的功能。而且通用閉包的特性就是會保存上下文中引用過的值。

     以下面的例子:引用了上下文中的$search和$replacement

      可能這樣看起來並不特別,下面會詳細介紹。

     值得注意的是:閉包的生命週期

Support for references are necessary in order to achieve true closures( like javascript, where a variable originating in parent scope can be modified by closures) while copying per default fits best with the current semantics of PHP and does not cause headaches in loop( for example, when importing a loop index into a closure).

  在OOP中的Closure 默承認以訪問 Class裏面的 $this 指針,而不用像上面那樣使用use來直接引入。

相關文章
相關標籤/搜索