php中static和self調用靜態方法區別
阿新 • • 發佈:2018-04-19
php由於看到框架裏面經常使用static::method() 於是稍微了解下static和self的區別
廢話少說,直接上代碼
class Father { public function __construct() { $this->init(); self::test(); } public static function test() { echo "father test....<br>"; } public function init() { echo 'father init...<br>'; } } class Son extends Father { public function init() { echo 'son init..<br>'; } public static function test() { echo "son test..<br>"; } } $son_obj = new Son();
顯示結果:
son init.. father test....
分析結果看,調用init非靜態方法已經被子類覆蓋了,但使用self調用靜態方法還是使用的是父類的test靜態方法
於是我們將代碼修改成static
class Father { public function __construct() { $this->init(); static::test(); } public static function test() { echo "father test....<br>"; } public function init() { echo 'father init...<br>'; } } class Son extends Father { public function init() { echo 'son init..<br>'; } public static function test() { echo "son test..<br>"; } } $son_obj = new Son();
出現的結果是:
son init.. son test..
使用static調用靜態方法使用了當前分類的靜態方法
php中static和self調用靜態方法區別