激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - PHP教程 - PHP類(lèi)繼承 extends使用介紹

PHP類(lèi)繼承 extends使用介紹

2020-06-05 15:40PHP教程網(wǎng) PHP教程

我們?cè)谖恼轮袨榇蠹以敿?xì)介紹了有關(guān)PHP類(lèi)繼承 extends的實(shí)現(xiàn)方法,希望對(duì)于新手來(lái)說(shuō)能夠提升他們?cè)赑HP語(yǔ)言編程中的能力

出來(lái)工作這么久了,項(xiàng)目經(jīng)驗(yàn)倒是不少,但是當(dāng)問(wèn)及底層的東西時(shí)候,常常是一言不發(fā)了。現(xiàn)在項(xiàng)目設(shè)計(jì)底層的東西越來(lái)越少,可以說(shuō)是真正用到的也就是那么一點(diǎn),真正核心的東西都已經(jīng)被框架封裝好了。總感覺(jué)自己一直進(jìn)步很慢,關(guān)于底層設(shè)計(jì)思想,常常也只可意會(huì)。隨著時(shí)間的流逝,我們常常會(huì)感慨書(shū)到用時(shí)方恨少了,接下來(lái)一定要惡補(bǔ)設(shè)計(jì)思想了。

今天先來(lái)復(fù)習(xí)一下類(lèi)繼承。

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

一個(gè)類(lèi)可以在聲明中用 extends,關(guān)鍵字繼承另一個(gè)類(lèi)的方法和屬性。PHP不支持多重繼承,一個(gè)類(lèi)只能繼承一個(gè)基類(lèi)。

被繼承的方法和屬性可以通過(guò)用同樣的名字重新聲明被覆蓋。但是如果父類(lèi)定義方法時(shí)使用了 final,則該方法不可被覆蓋。可以通過(guò) parent:: 來(lái)訪(fǎng)問(wèn)被覆蓋的方法或?qū)傩浴?br />
當(dāng)覆蓋方法時(shí),參數(shù)必須保持一致否則 PHP 將發(fā)出 E_STRICT 級(jí)別的錯(cuò)誤信息。但構(gòu)造函數(shù)例外,構(gòu)造函數(shù)可在被覆蓋時(shí)使用不同的參數(shù)。

關(guān)于基本的概念想必大家都會(huì)知道,但是對(duì)于final和parent::在項(xiàng)目中我還真沒(méi)有怎么使用過(guò),慚愧啊。
下面主要說(shuō)一下這兩個(gè)關(guān)鍵字的用途吧。

Final 關(guān)鍵字

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

范圍解析操作符(::)

范圍解析操作符或者更簡(jiǎn)單地說(shuō)是一對(duì)冒號(hào),可以用于訪(fǎng)問(wèn)靜態(tài)成員,類(lèi)常量,還可以用于覆蓋類(lèi)中的屬性和方法。
self,parent 和 static 這三個(gè)特殊的關(guān)鍵字是用于在類(lèi)定義的內(nèi)部對(duì)其屬性或方法進(jìn)行訪(fǎng)問(wèn)的。

當(dāng)一個(gè)子類(lèi)覆蓋其父類(lèi)中的方法時(shí),PHP 不會(huì)調(diào)用父類(lèi)中已被覆蓋的方法。是否調(diào)用父類(lèi)的方法取決于子類(lèi)。這種機(jī)制也作用于構(gòu)造函數(shù)和析構(gòu)函數(shù),重載以及魔術(shù)方法。

下面是調(diào)用父類(lèi)的方法的一個(gè)示例:

 

復(fù)制代碼 代碼如下:


<?php
class MyClass
{
    protected function myFunc() {
        echo "MyClass::myFunc()\n";
    }
}

 

class OtherClass extends MyClass
{
    // 覆蓋了父類(lèi)的定義
    public function myFunc()
    {
        // 但還是可以調(diào)用父類(lèi)中被覆蓋的方法
        parent::myFunc();
        echo "OtherClass::myFunc()\n";
    }
}

$class = new OtherClass();
$class->myFunc();
/**
 * 輸出結(jié)果 ->
 * MyClass::myFunc()
 * OtherClass::myFunc()
 */
?>

 

當(dāng)在類(lèi)定義之外引用到這些項(xiàng)目時(shí),要使用類(lèi)名。

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

不過(guò)說(shuō)句實(shí)話(huà),有一些關(guān)鍵字在小項(xiàng)目中確實(shí)是很難使用,不過(guò)我想多了解一些總還是需要的。尤其是當(dāng)你使用一些第三方的類(lèi)庫(kù)時(shí)候,當(dāng)你細(xì)細(xì)研究他的程序邏輯,你總能學(xué)點(diǎn)東西。盡管有些東西你長(zhǎng)時(shí)間不用,可能就忘記了,但是畢竟他曾經(jīng)在你腦海里經(jīng)過(guò)過(guò),總會(huì)為以后的人生留點(diǎn)痕跡。

最后廢話(huà)不多說(shuō)了,分享一段范圍解析操作符(::)應(yīng)用的代碼,你們也來(lái)感受下:

 

復(fù)制代碼 代碼如下:


<?php

 

class cA
{
    /**
     * 直接使用的測(cè)試屬性的默認(rèn)值
     */
    protected static $item = 'Foo';

    /**
     * 間接使用的測(cè)試屬性的默認(rèn)值
     */
    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
{
    /**
     * 重定義測(cè)試屬性的默認(rèn)值
     */
    protected static $item = 'Bar';

    public static function setOther($val)
    {
        self::$other = $val;
    }
    /**
     * 不重新聲明 method()方法
     */
}

class cC extends cA
{
    /**
     * 重定義測(cè)試屬性的默認(rèn)值
     */
    protected static $item = 'Tango';

    public static function method()
    {
        print self::$item."\r\n";
        print self::$other."\r\n";
    }

    /**
     * 不重新聲明 setOther()方法
     */
}

class cD extends cA
{
    /**
     * 重定義測(cè)試屬性的默認(rèn)值
     */
    protected static $item = 'Foxtrot';

    /**
     * 不重新聲明 任何方法來(lái)實(shí)現(xiàn)上述過(guò)程
     */
}

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()!

/**
 * 輸出結(jié)果 ->
 * Foo
 * cB
 * Tango
 * cC
 * Foo
 * cD
 */

?>

 

PHP extends類(lèi)繼承代碼示例:

 

復(fù)制代碼 代碼如下:

< ?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是一個(gè)繼承函數(shù)*/  
$b2=new a2(10,10);  
echo $b2->getx()."<br>";  
echo $b2->gety();  
?>


以上介紹的內(nèi)容就是PHP extends類(lèi)繼承的全部實(shí)現(xiàn)步驟。

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 成人综合免费视频 | 中国hdxxxx护士爽在线观看 | 成人一级视频 | 欧美一级毛片欧美一级成人毛片 | 中文字幕 日本 | 久久99国产综合精品 | 成年人高清视频在线观看 | 亚洲最新无码中文字幕久久 | 在线 日本 制服 中文 欧美 | 黄色成人短视频 | 最新毛片在线观看 | 成人黄色免费电影 | 天堂成人国产精品一区 | 99re热精品视频 | 黄色7777| 久久免费看毛片 | 羞羞视频免费网站 | 91精彩在线 | 一级成人毛片 | 99爱福利视频在线观看 | www.com超碰 | 亚洲第一成人av | 一级黄色免费电影 | 欧美精品激情视频 | 一区二区三区日韩 | 黄网站免费观看视频 | 欧美a级一区二区 | 免费国产视频大全入口 | 国产一级二级在线播放 | 91国在线高清视频 | 精品国产一区二区三区在线观看 | 欧美成人精品欧美一级乱黄 | www.99热精品 | 日韩毛片在线看 | 日韩a毛片免费观看 | 最新日韩精品在线观看 | 福利一区二区三区视频在线观看 | 九九热在线视频观看 | 九一成人| 亚洲网站在线观看 | 天天操天天看 |