class A { const STR = "A"; public function x() { echo self::STR;
}
} class B extends A{ const STR = "B";
}
(new B)->x();最后輸出結果是A,該怎么理解這個呢?猜想一:self在編譯時會綁定為當前類,可理解成編譯時所有的self替換為所處類名,這樣別的類繼承父類方法后,方法代碼里并不是self::xxx,而是父類名::xxx所以例子里的str就是父類里的str猜想二:子類繼承父類方法,其實并不是把父類方法拿過來,而是有了父類方法的訪問權限,當調用子類里沒有的方法時,會去父類里找,找到后在父類里執行,自然就self指向父類這兩種到底哪種對呢?如果都不對的話應該怎么理解self呢?先謝謝大家指點了
3 回答

動漫人物
TA貢獻1815條經驗 獲得超10個贊
<?phpclass A { const STR = "A"; public function x() { echo self::STR; } }class B extends A{ const STR = "B"; public function x() { echo self::STR; } } (new B)->x();
復寫一下就好理解
- 3 回答
- 0 關注
- 1361 瀏覽
添加回答
舉報
0/150
提交
取消