一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - PHP類繼承 extends使用介紹

PHP類繼承 extends使用介紹

2020-06-05 15:40PHP教程網 PHP教程

我們在文章中為大家詳細介紹了有關PHP類繼承 extends的實現方法,希望對于新手來說能夠提升他們在PHP語言編程中的能力

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

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

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

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

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

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

關于基本的概念想必大家都會知道,但是對于final和parent::在項目中我還真沒有怎么使用過,慚愧啊。
下面主要說一下這兩個關鍵字的用途吧。

Final 關鍵字

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

范圍解析操作符(::)

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

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

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

 

復制代碼 代碼如下:


<?php
class 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。

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

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

 

復制代碼 代碼如下:


<?php

 

class 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類繼承的全部實現步驟。

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日本一区二区三区国产 | 欧美日韩导航 | 天天射寡妇射 | 日本视频免费在线观看 | 草莓绿巨人香蕉茄子芭乐 | 天天做天天爱天天综合网 | 晚上禁用的十大黄台视频 | 好大好深受不了了快进来 | 成人青青草 | 1769亚洲欧美资源站 | 亚洲激情在线 | 人人爽人人草 | heyzo1754北岛玲在线视频 | 果冻传媒在线播放观看w | 国产剧情一区二区三区 | 亚洲99久久无色码中文字幕 | 日韩小视频在线观看 | 日韩视频在线精品视频免费观看 | 韩国甜性涩爱免费观看 | 日日操综合 | 97涩色| 亚偷熟乱区视频在线观看 | 高清视频大片免费观看 | 国产japanese孕妇孕交 | 91视频夜色 | 无码精品AV久久久奶水 | 午夜精品免费 | 国产精品亚洲综合久久 | 成年性生交大片免费看 | 国产一区私人高清影院 | 毛片资源| 精品国产中文字幕在线视频 | 日韩在线视频一区二区三区 | 青草青青在线视频 | 操日日| 日韩免费一级 | 久久草香蕉频线观 | 射综合网| 久久无码人妻AV精品一区 | 草莓视频在线观看免费 | 久久国产影院 |