摘要:首先闡明結論,在中指向定義了當前被調用方法的類,指向調用當前靜態方法的類。下面的例子更好的說明了和之間的差異后者使用了的后期靜態綁定指向調用方法的當前類
首先闡明結論,在PHP中 self指向定義了當前被調用方法的類, static指向調用當前靜態方法的類。
接下來通過一個例子來證明上面的結果
class A { public static $_a = "Class A"; public static function echoProperty() { echo self::$_a . PHP_EOL; } } class B extends A { public static $_a = "Class B"; } $obj = new B(); B::echoProperty();//輸出 Class A
之所以會這樣是因為使用self:: 或者__CLASS__對當前類的靜態引用,取決于定義被調用方法所在的類,將上面Class A的方法echoProperty做一下修改變成:
class A { public static $_a = "Class A"; public static function echoProperty() { echo static::$_a . PHP_EOL; } } //再次調用B::echoProperty將輸出 "CLASS B"
為了避免上面第一個例子中看到的子類重寫父類的靜態屬性后,使用繼承來的方法仍然訪問父類的靜態屬性, PHP5.3增加了一個新的語法:后期靜態綁定(Late static binding), 使用static關鍵字替代self關鍵字,使得static指向與get_called_class()返回的相同的類,即當前調用靜態方法的類, 該關鍵字對于靜態方法的訪問同樣有效。
下面的例子更好的說明了new self()和new static()之間的差異(后者使用了PHP的后期靜態綁定指向調用方法的當前類)
class A { public static function get_self() { return new self(); } public static function get_static() { return new static(); } } class B extends A {} echo get_class(B::get_self()); // A echo get_class(B::get_static()); // B echo get_class(A::get_self()); // A echo get_class(A::get_static()); // A
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/22039.html
摘要:在的面向對象編程中,總會遇到可你知道和的區別么其實區別很簡單,只需要寫幾個就能懂得到輸出可以發現,在子類中還是會調用父類的方法得到輸出可以看到,在調用,子類哪怕調用的是父類的方法,但是父類方法中調用的方法還會是子類的方法好繞嘴。。 在php的面向對象編程中,總會遇到 class test{ public static function test(){ self::func(...
摘要:很多情況下,通常一個人類,即創建了一個具體的對象。對象就是數據,對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍圖或原型。在中,對象通過對類的實體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...
摘要:很多情況下,通常一個人類,即創建了一個具體的對象。對象就是數據,對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍圖或原型。在中,對象通過對類的實體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...
摘要:很多情況下,通常一個人類,即創建了一個具體的對象。對象就是數據,對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍圖或原型。在中,對象通過對類的實體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...
摘要:設計模式理解設計模式是面向對象編程的經驗總結和最佳實踐解決某一類特定問題。設計模式分類創建型單例模式工廠模式簡單工廠抽象工廠構建者模式原型模式結構型行為型觀察者模式責任鏈模式單例模式單例模式一般使用在資源共享和需要控制資源的情況下。 面向對象與面向過程的區別 做事情的思考方式不同面向對象----分析再拆出對象面向過程----分析再拆出步驟 聯系面向對象和面向過程都是一種編程思維,面向...
閱讀 3681·2021-09-22 15:28
閱讀 1300·2021-09-03 10:35
閱讀 882·2021-09-02 15:21
閱讀 3483·2019-08-30 15:53
閱讀 3500·2019-08-29 17:25
閱讀 575·2019-08-29 13:22
閱讀 1560·2019-08-28 18:15
閱讀 2290·2019-08-26 13:57