中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP OPP機制和模式簡介

發布時間:2021-07-28 17:38:44 來源:億速云 閱讀:107 作者:chen 欄目:開發技術

本篇內容介紹了“PHP OPP機制和模式簡介”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

1.抽象類

抽象類機制中總是要定義一個公共的基類,而將特定的細節留給繼承者來實現。通過抽象概念,可以在開發項目中創建擴展性很好的架構。任何一個類,如果它里面至少有一個方法是被聲明為抽象的,那么這個類就必須被聲明為抽象的。被定義為抽象的方法只是聲明了其調用方式(參數),不能定義其具體的功能實現。在類的聲明中使用 abstract 修飾符就可以將某個類聲明為抽象的。

1.1方法原型(prototype)

是指方法的定義中剔除了方法體之后的簽名。它包括存取級別、函數關鍵字、函數名稱和參數。他不包含({})或者括號內部的任何代碼。例如下面的代碼就是一個方法原型:

復制代碼 代碼如下:


public function prototypeName($protoParam)

繼承一個抽象類的時候,子類必須定義父類中的所有抽象方法;另外,這些方法的訪問控制必須和父類中一樣(或者更為寬松)。

1.2關于抽象類

    某個類只要包含至少一個抽象方法就必須聲明為抽象類
    聲明為抽象的方法,在實現的時候必須包含相同的或者更低的訪問級別。
    不能使用 new 關鍵字創建抽象類的實例。
    被生命為抽象的方法不能包含函數體。
    如果將擴展的類也聲明為抽象類,在擴展抽象類時,可以不用實現所有的抽象方法。(如果某個類從抽象類繼承,當它沒有實現基類中所聲明的所有抽象方法時,它就必須也被聲明為抽象的。)

1.3使用抽象類

復制代碼 代碼如下:


<?php
abstract class Car
{   
    abstract function getMaxSpeend();
}

class Roadster extends Car
{
    public $Speend;

    public function SetSpeend($speend = 0)
    {
        $this->Speend = $speend;
    }
    public function getMaxSpeend()
    {
        return $this->Speend;
    }
}

class Street
{
    public $Cars ;
    public $SpeendLimit ;

    function __construct( $speendLimit = 200)
    {
        $this -> SpeendLimit = $speendLimit;
        $this -> Cars = array();
    }

    protected function IsStreetLegal($car)
    {
        if ($car->getMaxSpeend() < $this -> SpeendLimit)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public function AddCar($car)
    {
        if($this->IsStreetLegal($car))
        {
            echo 'The Car was allowed on the road.';
            $this->Cars[] = $car;
        }
        else
        {
            echo 'The Car is too fast and was not allowed on the road.';
        }
    }
}

$Porsche911 = new Roadster();
$Porsche911->SetSpeend(340);

$FuWaiStreet = new Street(80);
$FuWaiStreet->AddCar($Porsche911);

/**
 *
 * @result
 *
 * The Car is too fast and was not allowed on the road.[Finished in 0.1s]
 *
 */
?>

2.對象接口

使用接口(interface),可以指定某個類必須實現哪些方法,但不需要定義這些方法的具體內容。

接口是通過 interface 關鍵字來定義的,就像定義一個標準的類一樣,但其中定義所有的方法都是空的。

接口中定義的所有方法都必須是公有,這是接口的特性。

接口是一種類似于類的結構,可用于聲明實現類所必須聲明的方法。例如,接口通常用來聲明API,而不用定義如何實現這個API。

    大多數開發人員選擇在接口名稱前加上大寫字母I作為前綴,以便在代碼和生成的文檔中將其與類區別開來。

2.1使用接口

和集成抽象類需要使用 extends 關鍵字不同的是,實現接口使用的是 implements 關鍵字。一個類可以實現多個接口,這時,我們需要用逗號將他們隔開。如果將某個類標記為實現了某個接口,但卻沒有實現這個借口的所有方法,將會拋出錯誤。

2.2使用接口的案例

復制代碼 代碼如下:


<?php
abstract class Car
{   
    abstract function SetSpeend($speend = 0);
}

interface ISpeendInfo
{
    function GetMaxSpeend();
}

class Roadster extends Car implements ISpeendInfo
{

    public $Speend;

    public function SetSpeend($speend = 0)
    {
        $this->Speend = $speend;
    }

    public function getMaxSpeend()
    {
        return $this->Speend;
    }
}

class Street
{

    public $Cars ;
    public $SpeendLimit ;

    function __construct( $speendLimit = 200)
    {
        $this -> SpeendLimit = $speendLimit;
        $this -> Cars = array();
    }

    protected function IsStreetLegal($car)
    {
        if ($car->getMaxSpeend() < $this -> SpeendLimit)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public function AddCar($car)
    {
        if($this->IsStreetLegal($car))
        {
            echo 'The Car was allowed on the road.';
            $this->Cars[] = $car;
        }
        else
        {
            echo 'The Car is too fast and was not allowed on the road.';
        }
    }
}


$Porsche911 = new Roadster();
$Porsche911->SetSpeend(340);

$FuWaiStreet = new Street(80);
$FuWaiStreet->AddCar($Porsche911);

/**
 *
 * @result
 *
 * The Car is too fast and was not allowed on the road.[Finished in 0.1s]
 *
 */
?>

3.instanceof 操作符

instanceof 操作符是PHP5中的一個比較操作符。他接受左右兩邊的參數,并返回一個boolean值。這個操作符是用來確定對象的某個實例是否為特定的類型,或者是否從某個類型繼承,又或者實現類某個特定的接口。

復制代碼 代碼如下:


echo $Porsche911 instanceof Car;
//result:1

echo $Porsche911 instanceof ISpeendInfo;
//result:1

4.契約式編程

契約式編程是指在編寫類之前實現聲明接口的一種編程實踐。這種方法在保證類的封裝性方面非常有用。使用契約式編程技術,我們可以在創建應用程序之前定義出視圖實現的功能,這和建筑師在修建大樓之前先畫好藍圖的做法非常相似。

5.總結

抽象類是使用 abstract 關鍵字聲明的類。通過將某個類標記為抽象類,我們可以推遲實現所聲明的方法。要將某個方法聲明為抽象方法,只要去掉包含所有大括號的方法實體,將方法聲明的代碼行用分號結束即可。

抽象類不能直接實例化,他們必須被繼承。

如果某個類從抽象類繼承,當它沒有實現基類中所聲明的所有抽象方法時,它就必須也被聲明為抽象的。

在接口中,我們可以聲明沒有方法體的方法原型,這點與抽象類很相似。他們之間的區別在于,接口不能聲明任何具有方法體的方法;并且他們使用的語法也不一樣。為了將揭開規則強制加到某個類上,我們需要使用implements關鍵字,而不是extends關鍵字。

有些情況下我們需要確定某個類是否是特定類的類型,或者是否實現了特定的接口。 instanceof 分成適合完成這個任務。instanceof 檢查三件事情:實例是否是某個特定的類型,實例是否從某個特定的類型繼承,實例或者他的任何祖先類是否實現類特定的接口。

某些語言具有從多個類繼承的能力,這稱為多重繼承。PHP不支持多重繼承。想法,他提供了為一個類聲明多個接口的功能。

接口在聲明類必須遵循的規則時非常有用。契約式編程技術使用這一功能來增強封裝性,優化工作流。

“PHP OPP機制和模式簡介”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

东宁县| 尖扎县| 孟连| 鄱阳县| 女性| 临泽县| 彩票| 荔浦县| 林西县| 石泉县| 屏南县| 平昌县| 兴海县| 石柱| 泰顺县| 中卫市| 苏尼特左旗| 县级市| 客服| 古交市| 曲沃县| 日照市| 漯河市| 鄱阳县| 磐石市| 晋州市| 宝兴县| 滕州市| 调兵山市| 新河县| 营山县| 蕉岭县| 徐水县| 泰和县| 清水县| 敦化市| 朔州市| 福建省| 昆明市| 定西市| 海安县|