閉包

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對象

相關文章
相關標籤/搜索