php 不符合常理的static self parent

沒有廢話 广匙,我想直接拋出問題哩俭。

一比默、php繼承問題

上代碼恬总。


class father{
    public function __construct(){
      echo "類father";
}
}
class child extends father{
    public function __construct(){
      echo "類child";
}
}

$p=new child();

輸出結(jié)果: 類child

如果我們接觸過純面向?qū)ο蟮恼Z言 :c#/java;
按照他們的語法鸣峭,以上例子將會(huì)輸出 :
類father
類child

當(dāng)我們在new子類對象的時(shí)候宏所,編譯器應(yīng)該會(huì)實(shí)例化它的父類,以此來產(chǎn)生一個(gè)繼承鏈條摊溶,我們看到表面上php僅僅實(shí)例化了一個(gè)子類對象爬骤,這并不科學(xué),也是后續(xù)問題產(chǎn)生的一個(gè)根本原因:php到底存不存在繼承鏈莫换?

二霞玄、static 、self拉岁、parent這些關(guān)鍵字

class father{
public $a="father";
public function __construct(){
      echo "類father";
}
public function Say(){
      echo __CLASS__."say";
}
}
class child{
    public function __construct(){
        parent::construct();
    self::Say();
static::Say();  

$this->a;
      echo "類 child";
}
}
$childs=new child();

如果php不存在繼承鏈坷剧,那么以上程序?qū)?bào)錯(cuò)。
所以php是存在繼承鏈喊暖。

并且以上存在一些語法規(guī)則惫企,子類可以通過self或者是static等關(guān)鍵字,去調(diào)用父類中可供調(diào)用的方法,和$this類似狞尔。

那么我們是不是就可以理解成:self::或者是static::語法丛版,指向了一個(gè)father類的實(shí)力對象? 要不然成員方法怎么調(diào)用偏序?

但是奇怪的是:static::/self:: 不能調(diào)用屬性字段(非靜態(tài))页畦,parent::也是如此。

這個(gè)就尷尬了研儒,憑什么非靜態(tài)的方法能調(diào)用豫缨,字段屬性就不行?

那么應(yīng)該推翻self::/static::是對象的引用端朵,他們應(yīng)該是類層面上的引用州胳。

產(chǎn)生了矛盾。

憑什么能調(diào)用成員的方法逸月,卻無法調(diào)用成員屬性栓撞?

答案存在于內(nèi)存分布上面:
我們知道內(nèi)存分為4部分:

  1. 靜態(tài)數(shù)據(jù)區(qū)
  2. 代碼區(qū)
    實(shí)例化對象的時(shí)候,將屬性都存放到了堆里面碗硬。方法存在于代碼區(qū)瓤湘,調(diào)用的時(shí)候,根據(jù)類指針來尋找存放地址恩尾,進(jìn)行調(diào)用弛说。

我們可以大體了解到,屬性可以在代碼運(yùn)行時(shí)動(dòng)態(tài)改變值翰意。方法木人,一旦我們定義好之后,代碼編譯完成方法體就很難改變冀偶,所以在內(nèi)存中如此存放醒第,更加節(jié)約空間。

所以进鸠,不管是static 還是self稠曼、parent都是指向類指針,可以調(diào)用靜態(tài)變量客年,以及方法列表霞幅。
$this真正指向本對象。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末量瓜,一起剝皮案震驚了整個(gè)濱河市司恳,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌绍傲,老刑警劉巖扔傅,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡铅鲤,警方通過查閱死者的電腦和手機(jī)划提,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來邢享,“玉大人鹏往,你說我怎么就攤上這事『粒” “怎么了伊履?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長款违。 經(jīng)常有香客問我唐瀑,道長,這世上最難降的妖魔是什么插爹? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任哄辣,我火速辦了婚禮,結(jié)果婚禮上赠尾,老公的妹妹穿的比我還像新娘力穗。我一直安慰自己,他們只是感情好气嫁,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布当窗。 她就那樣靜靜地躺著,像睡著了一般寸宵。 火紅的嫁衣襯著肌膚如雪崖面。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天梯影,我揣著相機(jī)與錄音巫员,去河邊找鬼。 笑死光酣,一個(gè)胖子當(dāng)著我的面吹牛疏遏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播救军,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼倘零!你這毒婦竟也來了唱遭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤呈驶,失蹤者是張志新(化名)和其女友劉穎拷泽,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡司致,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年拆吆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脂矫。...
    茶點(diǎn)故事閱讀 39,834評論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡枣耀,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出庭再,到底是詐尸還是另有隱情捞奕,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布拄轻,位于F島的核電站颅围,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏恨搓。R本人自食惡果不足惜院促,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望斧抱。 院中可真熱鬧一疯,春花似錦、人聲如沸夺姑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盏浙。三九已至眉睹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間废膘,已是汗流浹背竹海。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留丐黄,地道東北人斋配。 一個(gè)月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像灌闺,于是被迫代替她去往敵國和親艰争。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評論 2 354