首頁  >  文章  >  後端開發  >  PHP延遲靜態綁定

PHP延遲靜態綁定

巴扎黑
巴扎黑原創
2016-11-11 13:13:50887瀏覽

最近專案中遇到這樣一個case,感覺所有的Model類別都須是單例效能更高.因為所有的model皆繼承統一父類別BaseModel,所以在BaseModel中加入控制單例的程式碼,簡單示範如下:

Java代碼  

/*基类*/  
class BaseModel  
{  
  
    private static $instance = null;  
  
    public static function instance()  
    {  
  
        if (empty(self::$instance)) {  
  
            self::$instance = new self();  
        }  
  
        return self::$instance;  
    }  
}

然後是各個邏輯子類Model 

Java代碼  

/*商品类*/  
class GoodModel extends BaseModel{  
  
    public function getInfoById($goodId){  
  
        return array(  
            'id'=>$goodId,  
            'name'=>'小苹果',  
            'logo'=>'http://t3.qlogo.cn/mbloghead/65518bb9e5287fcd5864/180'  
        );  
    }  
}  
  
################################################################  
$good = GoodModel::instance();  
  
var_dump($good);



這是就需要介紹self 

self::調用的變數只是該類別的即使該類別被繼承變數被重寫調用父類別裡的函數self::調用的變數還是輸出父類別的變數值而不會輸出被重寫的值


所以需要採用static關鍵字延遲靜態綁定,static代表了子類 
代碼如下 


Java代碼  

/*基類*/  
rrr

object(BaseModel)#1 (0) {  
}

其實也可用get_called_class函數來解決上面的問題,程式碼如下 

Java程式碼  

class BaseModel  
{  
  
    private static $instance = null;  
  
    public static function instance()  
    {  
  
        if (empty(self::$instance)) {  
  
            self::$instance = new static();  
        }  
  
        return self::$instance;  
    }  
}


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn