亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

PHP設(shè)計模式(二):抽象類和接口

xialong / 1597人閱讀

摘要:在設(shè)計模式中,抽象類不能夠被實例化初始化,但是可以依靠具體類的繼承來實現(xiàn)。對于大型項目來說,對象都是由基本的抽象類繼承實現(xiàn),而這些類的方法通常都由接口來定義。

原文地址:PHP設(shè)計模式(二):抽象類和接口

Introduction

對于編程來說,對事物的抽象是一個老生常談的話題,抽象問題更利于面向?qū)ο缶幊桃约俺绦蛟O(shè)計模式。
和C/C++,Java,Python等語言一樣,PHP也支持面向?qū)ο?,但是又有略微區(qū)別,如PHP支持在接口中定義常量,但是不支持抽象變量。

抽象/Abstraction

對事物的抽象是指,區(qū)別兩個不同事物之間的本質(zhì)特征,這兩個事物應(yīng)該在某個視角上有明確的區(qū)分界限。

如,鯨魚和鯉魚,這兩個事物在動物的視角上,有明確的區(qū)分界限,屬于不同的動物;但是在水生動物的視角上,他們屬于同一種動物的抽象。
合理的對問題進(jìn)行抽象,構(gòu)造模型,將更容易通過編程來解決問題。
記住:抽象是編程解決問題的基礎(chǔ),越復(fù)雜的問題,越需要一開始就對問題進(jìn)行抽象,而不是直接寫代碼。

抽象類/Abstract Class

抽象類是一個編程概念,PHP中叫Abstract Classes。在設(shè)計模式中,抽象類不能夠被實例化/初始化,但是可以依靠具體類的繼承來實現(xiàn)。
有點抽象,對吧?用代碼來解釋:

定義了動物這個抽象類,動物的屬性是名字name,然后有一個方法是吃食物eat food。
為什么動物是抽象類?因為動物這個物種并不是一個存在于自然界的東西,它是人類腦海里抽象出的東西。存在自然界的是鯨魚和鯉魚這樣的確定性動物。
比如鯨魚的概念,應(yīng)該是屬于動物,繼承Animal類,我們定義鯨魚這個類以及吃東西的方法:

name = "Whale";
  }
  public function eat($food) {
    echo $this->name . " eat " . $food . ".
";
  }
}
?>

現(xiàn)在我們可以初始鯨魚類,并且調(diào)用吃的方法了:

eat("fish");
?>

運行一下:

$ php Whale.php
Whale eat fish.
接口/Interface

PHP也支持面向過程編程概念中的接口,下面同樣用鯨魚的例子來講述:

同樣定義一個鯨魚類,來實現(xiàn)上述接口:

現(xiàn)在我們可以初始鯨魚類,并且調(diào)用吃的方法了:

eat("fish");
?>

運行一下:

$ php Whale.php
Whale eat fish.
抽象類vs接口

上面的抽象類和接口的例子,看上去是不是類似?事實上,對于PHP編程來說,抽象類可以實現(xiàn)的功能,接口也可以實現(xiàn)。
抽象類的接口的區(qū)別,不在于編程實現(xiàn),而在于程序設(shè)計模式的不同。
一般來講,抽象用于不同的事物,而接口用于事物的行為。
如:水生生物是鯨魚的抽象概念,但是水生生物并不是鯨魚的行為,吃東西才是鯨魚的行為。
對于大型項目來說,對象都是由基本的抽象類繼承實現(xiàn),而這些類的方法通常都由接口來定義。
此外,對于事物屬性的更改,建議使用接口,而不是直接賦值或者別的方式,如:

observeEat($whale);
    $this->observeEat($carp);
  }
  function observeEat(IAction $animal) {
    $animal->eat();
  }
}
$observer = new observer();
?>

運行一下:

$ php Observer.php
Whale eat fish.
Carp eat moss.
Summary

好的設(shè)計模式是嚴(yán)格對問題進(jìn)行抽象,雖然抽象類和接口對于編程實現(xiàn)來說是類似的,但是對于程序設(shè)計模式是不同的。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/21474.html

相關(guān)文章

  • 關(guān)于抽象類和接口的初步理解

    摘要:關(guān)于抽象類和接口的初步理解什么是抽象類抽象類是指在前加了關(guān)鍵字且存在抽象方法在類方法關(guān)鍵字前加了關(guān)鍵字的類。抽象類不能被直接實例化。抽象類中只定義或部分實現(xiàn)子類需要的方法。抽象類提供了具體實現(xiàn)的標(biāo)準(zhǔn),而接口則是純粹的模板。 關(guān)于抽象類和接口的初步理解 什么是抽象類 抽象類是指在 class 前加了 abstract 關(guān)鍵字且存在抽象方法(在類方法 function 關(guān)鍵字前加了 ab...

    Julylovin 評論0 收藏0
  • PHP設(shè)計模式(六):MVC

    摘要:原文地址設(shè)計模式六世紀(jì)年代,計算機(jī)發(fā)展迅速,編程技術(shù)也日益分化。到了年代,的出現(xiàn)更是讓這種程序設(shè)計模式得以延續(xù)。根據(jù)設(shè)計模式三封裝中介紹的設(shè)計原則,在面向?qū)ο蟪绦蛟O(shè)計中,類和類之間的訪問交互和更新應(yīng)該是通過和。 原文地址:PHP設(shè)計模式(六):MVC Introduction 20世紀(jì)80年代,計算機(jī)發(fā)展迅速,編程技術(shù)也日益分化。桌面應(yīng)用編程,也逐漸出現(xiàn)了用戶圖形界面和程序邏輯分離的程...

    時飛 評論0 收藏0
  • PHP面試??純?nèi)容之面向?qū)ο螅?)

    摘要:面試專欄正式起更,每周一三五更新,提供最好最優(yōu)質(zhì)的面試內(nèi)容。繼上一篇面試??純?nèi)容之面向?qū)ο蟀l(fā)表后,今天更新面向?qū)ο蟮淖詈笠黄?。面向?qū)ο蟮闹饕卣鳛榉庋b繼承多態(tài)。為了提高內(nèi)聚性減少引起變化,單一原則是低耦合高內(nèi)聚的面向原則上的引申。 PHP面試專欄正式起更,每周一、三、五更新,提供最好最優(yōu)質(zhì)的PHP面試內(nèi)容。繼上一篇PHP面試常考內(nèi)容之面向?qū)ο螅?)發(fā)表后,今天更新面向?qū)ο蟮淖詈笠黄?...

    xfee 評論0 收藏0
  • PHP設(shè)計模式(四):繼承

    摘要:原文地址設(shè)計模式四繼承在設(shè)計模式二抽象類和接口以及設(shè)計模式三封裝中,我們已經(jīng)見過繼承,也就是關(guān)鍵字。對于一個好的程序設(shè)計,需要類和類之間應(yīng)該是低耦合的。繼承通常是繼承自抽象類,而不是具體類。 原文地址:PHP設(shè)計模式(四):繼承 Introduction 在PHP設(shè)計模式(二):抽象類和接口以及PHP設(shè)計模式(三):封裝中,我們已經(jīng)見過繼承,也就是extends關(guān)鍵字。和C/C++,J...

    hellowoody 評論0 收藏0
  • PHP經(jīng)驗總結(jié) - 聊聊面向?qū)ο?/b>

    摘要:例如汽車這個名詞可以理解為汽車的總類,但這輛寶馬汽車則是一個具體的汽車對象。當(dāng)在類成員方法內(nèi)部調(diào)用的時候,可以使用偽變量調(diào)用當(dāng)前對象的屬性。在面向?qū)ο笾袆t被稱之為方法。 簡述 現(xiàn)在大伙都在講面向?qū)ο缶幊?,但是我們也得先找著一個對象是不?不然怎么面向?qū)ο??怎么編程?--- 笑話一則,但是理不虧,要搞P面向?qū)ο缶幊?,我們起碼要先搞懂對象(還有類)是什么?只有了解它,理解它,你才能駕馭它。...

    lpjustdoit 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<