国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

php繼承類 extends用法詳解

2020-03-22 18:43:45
字體:
來源:轉載
供稿:網友
類繼承很重要,作為程序員也基本每天都會和他打交道,但是有些東西你真的都知道嗎?下面是從網址上面看到的。

一個類可以在聲明中用 extends,關鍵字繼承另一個類的方法和屬性。PHP不支持多重繼承,一個類只能繼承一個基類。
被繼承的方法和屬性可以通過用同樣的名字重新聲明被覆蓋。但是如果父類定義方法時使用了 final,則該方法不可被覆蓋。可以通過 parent:: 來訪問被覆蓋的方法或屬性。
當覆蓋方法時,參數必須保持一致否則 PHP 將發出 E_STRICT 級別的錯誤信息。但html' target='_blank'>構造函數例外,構造函數可在被覆蓋時使用不同的參數。
關于基本的概念想必大家都會知道,但是對于final和parent::在項目中我還真沒有怎么使用過,慚愧啊。
下面主要說一下這兩個關鍵字的用途吧。

Final 關鍵字

PHP 5新增的一個關鍵字,如果父類中的方法被聲明為 final,則子類無法覆蓋該方法。同樣如果一個類被聲明為 final,則不能被繼承。
需要注意的是: 屬性不能被定義為 final,只有類和方法才能被定義為 final。

范圍解析操作符(::)

范圍解析操作符或者更簡單地說是一對冒號,可以用于訪問靜態成員,類常量,還可以用于覆蓋類中的屬性和方法。
self,parent 和 static 這三個特殊的關鍵字是用于在類定義的內部對其屬性或方法進行訪問的。

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

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

<?phpclass MyClass{    protected function myFunc() {        echo "MyClass::myFunc()/n";    }}class OtherClass extends MyClass{    // 覆蓋了父類的定義    public function myFunc()    {        // 但還是可以調用父類中被覆蓋的方法        parent::myFunc();        echo "OtherClass::myFunc()/n";    }}$class = new OtherClass();$class->myFunc();/** * 輸出結果 -> * MyClass::myFunc() * OtherClass::myFunc() */?>

當在類定義之外引用到這些項目時,要使用類名。
::class 自 PHP 5.5 起,關鍵詞 class 也可用于類名的解析。使用 ClassName::class 你可以獲取一個字符串,包含了類 ClassName 的完全限定名稱。這對使用了 命名空間 的類尤其有用。這些可能就是以后要討論的話題了,關于這個概念那就是以后要討論的了,現在我們還在使用php5.3。
不過說句實話,有一些關鍵字在小項目中確實是很難使用,不過我想多了解一些總還是需要的。尤其是當你使用一些第三方的類庫時候,當你細細研究他的程序邏輯,你總能學點東西。盡管有些東西你長時間不用,可能就忘記了,但是畢竟他曾經在你腦海里經過過,總會為以后的人生留點痕跡。
最后廢話不多說了,分享一段范圍解析操作符(::)應用的代碼,你們也來感受下:

<?phpclass cA{    /**     * 直接使用的測試屬性的默認值     */    protected static $item = 'Foo';    /**     * 間接使用的測試屬性的默認值     */    protected static $other = 'cA';    public static function method()    {        print self::$item."/r/n";        print self::$other."/r/n";    }    public static function setOther($val)    {        self::$other = $val;    }}class cB extends cA{    /**     * 重定義測試屬性的默認值     */    protected static $item = 'Bar';    public static function setOther($val)    {        self::$other = $val;    }    /**     * 不重新聲明 method()方法     */}class cC extends cA{    /**     * 重定義測試屬性的默認值     */    protected static $item = 'Tango';    public static function method()    {        print self::$item."/r/n";         print self::$other."/r/n";     }    /**     * 不重新聲明 setOther()方法     */}class cD extends cA{    /**     * 重定義測試屬性的默認值     */    protected static $item = 'Foxtrot';    /**     * 不重新聲明 任何方法來實現上述過程     */}cB::setOther('cB'); //  cB::method()!cB::method(); // cA::method()!cC::setOther('cC'); // cA::method()!cC::method(); // cC::method()!cD::setOther('cD'); // cA::method()!cD::method(); // cA::method()!/** * 輸出結果 -> * Foo * cB * Tango * cC * Foo * cD */?>

PHP extends類繼承代碼示例:

< ?php   class a{   public $x;   public $y;   function construct($x=0,$y=0){   $this->x=$x;   $this->y=$y;   }   function getx(){   return $this->x;   }   function gety(){   return $this->y;   }   function destruct(){}   }   class a2 extends a{}   /*extends是一個繼承函數*/   $b2=new a2(10,10);   echo $b2->getx()."<br>";   echo $b2->gety();   ?>

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

以上就是php繼承類 extends用法詳解的詳細內容,更多請關注 其它相關文章!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 吉木萨尔县| 大足县| 佳木斯市| 成都市| 仙游县| 寿阳县| 阜新| 马尔康县| 乐安县| 富平县| 宣城市| 全州县| 策勒县| 翁牛特旗| 南开区| 庄河市| 白河县| 阿坝县| 富蕴县| 车险| 渭南市| 三台县| 彩票| 杨浦区| 德格县| 南宫市| 普陀区| 远安县| 庆城县| 大城县| 江源县| 蓝山县| 东乌| 桂平市| 隆安县| 巨野县| 南郑县| 衢州市| 绵竹市| 安龙县| 巴东县|