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

小怪獸愛吃肉
TA貢獻1852條經(jīng)驗 獲得超1個贊
使用 self:: 或者?CLASS?對當(dāng)前類的靜態(tài)引用,取決于定義當(dāng)前方法所在的類
你的猜想二是對的.

慕少森
TA貢獻2019條經(jīng)驗 獲得超9個贊
實際上他們的原理是:
self 是針對當(dāng)前本類的使用
this 是對當(dāng)前類的調(diào)用,如果當(dāng)前類沒有,則找尋到父類去

動漫人物
TA貢獻1815條經(jīng)驗 獲得超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();
復(fù)寫一下就好理解
- 3 回答
- 0 關(guān)注
- 1373 瀏覽
添加回答
舉報
0/150
提交
取消