您好,登錄后才能下訂單哦!
由于看到框架里面經常使用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調用靜態方法使用了當前分類的靜態方法
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。