最近專案中遇到這樣一個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) { }
Java程式碼
class BaseModel { private static $instance = null; public static function instance() { if (empty(self::$instance)) { self::$instance = new static(); } return self::$instance; } }