php5.3有一個很是讚的新特性,那就是支持匿名函數(閉包)。匿名函數可用於動態建立函數,並保存到一個變量中。php
function operate($operator){ if($operator == "-"){ return function($a,$b){ return $a-$b; }; }else{ return function($a,$b){ return $a+$b; }; } } $subtraction = operate("-"); echo $subtraction(4,3);//1 $addition = operate("+"); echo $addition(1,2);//3
說明:經過operate函數,咱們能夠生成不一樣的函數做爲結果返回,並將這個結果直接做爲函數調用,上面的代碼分別動態建立了減法運算和加法運算函數。閉包
$di = new Di(); $di->set("zhangsan",function(){ return new User('張三'); }); $di->set("lisi",function(){ return new User("李四"); }); echo $di->get("zhangsan")->getUserName(); echo $di->get("lisi")->getUserName();
說明:在$di->get()的時候才執行了匿名函數並將對象返回,這就實現了按需實例化,不用則不實例化,提升效率。函數
閉包特性:
常常寫js的同窗應該知道js的閉包特性,簡單的說就是在一個函數裏能夠定義子函數,父函數中的變量在子函數中能夠直接使用,那麼PHP的閉包怎麼用呢?有一點區別。spa
function func1($a){ return function() use ($a){ echo $a; }; } $a = func1("a"); $a();//輸出a
當你想將外層變量傳進內層匿名函數時,使用use (變量)的方式。code
a對象