麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 語言 > PHP > 正文

PHP類繼承 extends使用介紹

2024-09-04 11:46:51
字體:
來源:轉載
供稿:網友

出來工作這么久了,項目經驗倒是不少,但是當問及底層的東西時候,常常是一言不發了。現在項目設計底層的東西越來越少,可以說是真正用到的也就是那么一點,真正核心的東西都已經被框架封裝好了。總感覺自己一直進步很慢,關于底層設計思想,常常也只可意會。隨著時間的流逝,我們常常會感慨書到用時方恨少了,接下來一定要惡補設計思想了。

今天先來復習一下類繼承。

類繼承很重要,作為程序員也基本每天都會和他打交道,但是有些東西你真的都知道嗎?下面是從官網上面看到的。

一個類可以在聲明中用 extends,關鍵字繼承另一個類的方法和屬性。PHP不支持多重繼承,一個類只能繼承一個基類。

被繼承的方法和屬性可以通過用同樣的名字重新聲明被覆蓋。但是如果父類定義方法時使用了 final,則該方法不可被覆蓋??梢酝ㄟ^ parent:: 來訪問被覆蓋的方法或屬性。

當覆蓋方法時,參數必須保持一致否則 PHP 將發出 E_STRICT 級別的錯誤信息。但構造函數例外,構造函數可在被覆蓋時使用不同的參數。

關于基本的概念想必大家都會知道,但是對于final和parent::在項目中我還真沒有怎么使用過,慚愧啊。

下面主要說一下這兩個關鍵字的用途吧。

Final 關鍵字

PHP 5新增的一個關鍵字,如果父類中的方法被聲明為 final,則子類無法覆蓋該方法。同樣如果一個類被聲明為 final,則不能被繼承。

需要注意的是: 屬性不能被定義為 final,只有類和方法才能被定義為 final。

范圍解析操作符(::)

當一個子類覆蓋其父類中的方法時,PHP 不會調用父類中已被覆蓋的方法。是否調用父類的方法取決于子類。這種機制也作用于構造函數和析構函數,重載以及魔術方法。

下面是調用父類的方法的一個示例:

  1. <?php 
  2. class MyClass 
  3.     protected function myFunc() { 
  4.         echo "MyClass::myFunc()/n"
  5.     } 
  6.  
  7. class OtherClass extends MyClass 
  8.     // 覆蓋了父類的定義 
  9.     public function myFunc() 
  10.     { 
  11.         // 但還是可以調用父類中被覆蓋的方法 
  12.         parent::myFunc(); 
  13.         echo "OtherClass::myFunc()/n"
  14.     } 
  15.  
  16. $class = new OtherClass(); 
  17. $class->myFunc(); 
  18. /** 
  19.  * 輸出結果 -> 
  20.  * MyClass::myFunc() 
  21.  * OtherClass::myFunc() 
  22.  */ 
  23. ?> 

當在類定義之外引用到這些項目時,要使用類名。

::class 自 PHP 5.5 起,關鍵詞 class 也可用于類名的解析。使用 ClassName::class 你可以獲取一個字符串,包含了類 ClassName 的完全限定名稱。這對使用了 命名空間 的類尤其有用。這些可能就是以后要討論的話題了,關于這個概念那就是以后要討論的了,現在我們還在使用php5.3。

不過說句實話,有一些關鍵字在小項目中確實是很難使用,不過我想多了解一些總還是需要的。尤其是當你使用一些第三方的類庫時候,當你細細研究他的程序邏輯,你總能學點東西。盡管有些東西你長時間不用,可能就忘記了,但是畢竟他曾經在你腦海里經過過,總會為以后的人生留點痕跡。

最后廢話不多說了,分享一段范圍解析操作符(::)應用的代碼,你們也來感受下:

  1. <?php 
  2.  
  3. class cA 
  4.     /** 
  5.      * 直接使用的測試屬性的默認值 
  6.      */ 
  7.     protected static $item = 'Foo'
  8.  
  9.     /** 
  10.      * 間接使用的測試屬性的默認值 
  11.      */ 
  12.     protected static $other = 'cA'
  13.  
  14.     public static function method() 
  15.     { 
  16.         print self::$item."/r/n"
  17.         print self::$other."/r/n"
  18.     } 
  19.  
  20.     public static function setOther($val
  21.     { 
  22.         self::$other = $val
  23.     } 
  24.  
  25. class cB extends cA 
  26.     /** 
  27.      * 重定義測試屬性的默認值 
  28.      */ 
  29.     protected static $item = 'Bar'
  30.  
  31.     public static function setOther($val
  32.     { 
  33.         self::$other = $val
  34.     } 
  35.     /** 
  36.      * 不重新聲明 method()方法 
  37.      */ 
  38.  
  39. class cC extends cA 
  40.     /** 
  41.      * 重定義測試屬性的默認值 
  42.      */ 
  43.     protected static $item = 'Tango'
  44.  
  45.     public static function method() 
  46.     { 
  47.         print self::$item."/r/n";  
  48.         print self::$other."/r/n";  
  49.     } 
  50.  
  51.     /** 
  52.      * 不重新聲明 setOther()方法 
  53.      */ 
  54.  
  55. class cD extends cA 
  56.     /** 
  57.      * 重定義測試屬性的默認值 
  58.      */ 
  59.     protected static $item = 'Foxtrot'
  60.  
  61.     /** 
  62.      * 不重新聲明 任何方法來實現上述過程 
  63.      */ 
  64.  
  65. cB::setOther('cB'); //  cB::method()! 
  66. cB::method(); // cA::method()! 
  67. cC::setOther('cC'); // cA::method()! 
  68. cC::method(); // cC::method()! 
  69. cD::setOther('cD'); // cA::method()! 
  70. cD::method(); // cA::method()! 
  71. //Vevb.com 
  72. /** 
  73.  * 輸出結果 -> 
  74.  * Foo 
  75.  * cB 
  76.  * Tango 
  77.  * cC 
  78.  * Foo 
  79.  * cD 
  80.  */ 
  81.  
  82. ?> 

PHP extends類繼承代碼示例:

  1. < ?php    
  2. class a{    
  3. public $x;    
  4. public $y;    
  5. function __construct($x=0,$y=0){    
  6. $this->x=$x;    
  7. $this->y=$y;    
  8. }    
  9. function getx(){    
  10. return $this->x;    
  11. }    
  12. function gety(){    
  13. return $this->y;    
  14. }    
  15. function __destruct(){}    
  16. }    
  17. class a2 extends a{}    
  18. /*extends是一個繼承函數*/    
  19. $b2=new a2(10,10);    
  20. echo $b2->getx()."<br>";    
  21. echo $b2->gety();    
  22. ?>  

以上介紹的內容就是PHP extends類繼承的全部實現步驟。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 成人在线观看一区 | 国产午夜精品一区二区三区在线观看 | 色淫影院 | 日韩黄在线 | 99精品国产一区二区三区 | 欧美日韩亚洲国产精品 | 法国性xxx精品hd | 午夜免费一区 | 亚洲精品一区中文字幕 | 久久国产精| 国产在线观看一区二区三区 | 久久精品一级片 | 美女视频大全网站免费 | 成人免费乱码大片a毛片视频网站 | 91精品国产乱码久 | 亚洲人成中文字幕在线观看 | 久久网页 | 国产乱淫av片免费观看 | 久久精品视频日本 | 成人男女视频 | 美国一级黄色毛片 | 91成人在线网站 | 国产午夜精品理论片a级探花 | 久国久产久精永久网页 | 久久精国 | 小视频成人 | 欧美顶级毛片在线播放小说 | 91麻豆精品国产91久久久无需广告 | 永久免费在线观看av | 欧美a∨一区二区三区久久黄 | 国产高潮好爽好大受不了了 | 欧美精品免费一区二区三区 | 98国内自拍在线视频 | 成人午夜免费在线视频 | 一级毛片免费在线 | 在线视频观看一区二区 | 中文字幕在线观看视频www | 久啪视频| 羞羞的视频免费在线观看 | 一级全毛片 | 欧美另类69xxxxx 视频 |