1. 程式人生 > >PHP面向物件的理解(1)

PHP面向物件的理解(1)

PHP中虛擬函式的理解:

相比其他語言,如C++,PHP語言有很多不同之處。

看個例子:

<?php 
// 定義父類
class P {

    public function name(){

        echo "P::name() is called. \n";

    }

    public function getName1(){

        self::name();

        echo "P::getName1 is called. \n";

    }

    public function getName2(){

        $this->name();

        echo "P::getName2() is called. \n";

    }

}

// 定義子類,繼承父類P
class S extends P{
public function name(){
echo "S::name() is called. \n";
}
}
測試方法如下:
$s = new S;
$s->getName1();
echo '<br/>';
echo '<br/>';
echo '<br/>';
$s->getName2();


>>>那麼,這將會輸出什麼呢?

在C++中,有virtual關鍵字定義類中的函式為虛擬函式。如果父類定義了 name () 函式為虛擬函式,並且在子類中被覆蓋,那麼將會呼叫子類的 name() 方法;否則呼叫父類的方法。

PHP中沒有virtual關鍵字,靠的是 self 和 $this 關鍵字實現虛擬函式的功能。self 關鍵字呼叫的是父類的方法,$this 呼叫的是子類的方法。

那麼這裡將輸出:

P::name() is called.

P::getName1 is called. 

S::name() is called.

P::getName2() is called.

>>>如果 一個G類繼承S類,那麼會怎麼樣呢? 

class G extends S(){
    public function name(){
        echo "G::name() is called.\n";
    }
}

$g = new G;
$g->getName1();
echo '<br/>';
echo '<br/>';
$g->getName2();



那麼這裡將輸出:這裡不會呼叫S中間類的 name() 方法。
P::name() is called.
P::getName1 is called. 

G::name() is called.
P::getName2() is called.


>>> 如果子類G想使用S類的 name() 方法,可以在S類中重寫P類的 getName 方法。

// 定義子類,繼承父類P
class S extends P{
    public function name(){
        echo "S::name() is called. \n";
    }
    public function getName1(){
        slef::name();
        echo "S::getName1() is called. \n";
    }
}




相關推薦

PHP面向物件程式設計1基礎

一、面向物件OOP(Oriented Object Programming)   面向過程的程式設計 將要實現的功能描述為一個從一開始到結束的連續的“步驟(過程)”。 一次逐步完成這些步驟。如果步驟比較大,又可以將該步驟細分為子步驟,以此類推。 程式從頭開

熟練使用Lua面向物件:基於table的面向物件實現1

轉:https://www.cnblogs.com/yao2yaoblog/p/6433553.html c++和java語言機制中本身帶有面向物件的內容,而lua設計的思想是超程式設計,沒有面向物件的實現。 但是利用lua的元表(matetable)機制,可以實現面向物件。要講清楚怎樣

淺談PHP面向物件程式設計

9.0 設計模式   在編寫程式時經常會遇到一此典型的問題或需要完成某種特定需求,設計模式就是針對這些問題和需求,在大量的實踐中總結和理論化之後優選的程式碼結構程式設計風格,以及解決問題的思考方式。 設計模式就像是經典的棋譜。不同的棋局,使用不同的棋諧,免得自己再去思考和模索。本節將針對PHP應用程式

淺談PHP面向物件程式設計

5.0 繼承   5.1 繼承的概念      在現實生活中,繼承一般指的是子女繼承父輩的財產。在程式中,繼承描述的是事物之間的所屬關係,通過繼承可以使許多事物之間形成一種關係體系 。     例如貓和狗都屬於動物,程式中便可以描述為貓和

淺談PHP面向物件程式設計

7.0 抽象類與介面   當定義一個類時,常常需要定義一些方法來描述該類的行為特徵、但有時這些方法的實現方式是無法確定的,此時就可以使用抽象類和介面。 抽象類和介面用於提高程式的靈活性、抽象類是一種特殊的類,而介面又是一種待殊的抽象類。 接下來本節將針對抽象類和介面進行詳細講解。 7.

淺談PHP面向物件程式設計

6.0 自動載入及魔術方法    6.1 自動載入 在PHP開發過程中,如果希望從外部引入一個class.通常會使用incluae和requre方法把定義這個class的檔案包含進來。但是,在大型的開發專案中,這麼做會產生大量的require或者include方法的使用。這樣不僅

淺談PHP面向物件程式設計

和一些面向物件的語言有所不同,PHP並不是一種純面向物件的語言,包PIP它支援面向物件的程式設計,並可以用於開發大型的商業程式。因此學好面向物件輸程對PHP程式設計師來說也是至關重要的。本章並針對面向物件程式設計在PIP語言中的使用進行詳細講解。 2.1 面向物件概述   面向物件是一種符

淺談PHP面向物件程式設計

傳統的面向過程   將要完成的工作,分作若干個步驟,或再細分為子步驟,然後後步驟從前往後一步一步完成,最初達致目標。 現代的面向物件   將要完成的工作拆分為“一個一個物件”的任務(功能),每個物件獨自完成自己的任務,任務之間的連結通過“呼叫”來實現,最終也完成了整體的工

【軟考】——面向物件技術1

面向物件???——》一種具有構造繼承性、 封裝性和多型的程式設計語言族的命名;               ???——》一種程式設計風格; 面向物件???——》物件 + 分類 + 繼承 + 

JAVA 面向物件基礎1

歡迎大佬們指正批評。 方法 1.1 各種語言都有方法的概念(有的稱為函式或面向過程) 1.1.1)封裝一段特定的業務邏輯或功能; 1.1.2)方法需要儘可能的獨立; 1.1.3)方法可以被反覆呼叫多次 1.1.4)減少程式碼的重複,有利於程式碼的維護,有利於團隊協作。 1.2 返

Js面向物件隨筆1

1、物件的概念:在ECMAScript-262中,物件被定義為“無序屬性的集合,其屬性可以包含基本值,物件或者函式,那麼在JavaScript中,物件也無非就是由一些無序的Key-Value對組成,其中Value可以是基本值,物件或者函式”。 2、我們常用Object.pr

PHP面向物件理解1

PHP中虛擬函式的理解: 相比其他語言,如C++,PHP語言有很多不同之處。 看個例子: <?php // 定義父類 class P { public function name(){ echo "P::name() is called.

淺談對Js面向物件理解1

    面向物件的語言有一個標誌,那就是它們都有類的概念,通過類來建立任意多個具有相同屬性和方法的物件。它是一種程式開發的方法,它將物件作為程式的基本單元,將邏輯和資料封裝其中,以提高程式碼的靈活性、重用性和擴充套件性。物件是把資料及對資料的操作方法放在一起,作為一個相互依存的整體。簡單的

理解繼承:JS面向物件程式設計封裝

依然是向阮前輩(阮一峰)學習的部落格原文 學了這一階段和峰大神的幾篇文章,打算下一階段滾回去把指標好好學一下 JS 中,萬物皆物件,但是它又不是一門真正的面向物件程式語言。 那如果我們要把“屬性(prototype)”和方法(“method”)封裝成一個物

PHP函數初識1

function private 區分大小寫 關鍵字 public 函數php函數的定義方式:修飾符 function 函數名(參數1,參數2...){ 執行體.}修飾符

PHP面向對象

集合 命名 相同 get 實體 實例 3.1 接口 pri public 公有的:本類,子類,外部對象都可以調用protected 受保護的:本類 子類,可以執行,外部對象不可以調用private 私有的:只能本類執行,子類與外部對象都不可調用面向對象編程的三大特點 1

面向對象1

訪問 架構 class 模塊 工程 min 世紀 啟動程序 內部數據 面向對象 什麽是面向對象? 面向對象編程(Object Oriented Programming, OOP, 面向對象程序設計)是一種計算機編程架構,OOP的一條基本原則是計算機程 序是由單個能夠起到子

Faster rcnn代碼理解1

感覺 組織 等我 ont 包含 還要 定義 fig 訓練數據 這段時間看了不少論文,回頭看看,感覺還是有必要將Faster rcnn的源碼理解一下,畢竟後來很多方法都和它有相近之處,同時理解該框架也有助於以後自己修改和編寫自己的框架。好的開始吧~ 這裏我們跟著Faster

php面向對象

直接 自動 bsp all interface star 自己 參數 ssr php中的重載技術   通常面向對象語言的重載技術   在一個類中有多個同名方法,每個方法的參數不同,這種現象稱為重載。   參數的不同:個數不同,類型不同,順序不同。   在php中,一個類中

python socket 的理解1

網絡 完成 ron bsp 接收數據 技術分享 檢測 cnblogs 無數據 前言 socket的用法簡單,但裏面的概念有點模糊,記錄自己本人的一點理解。 socket層結構圖 註意,從此圖中看出socket處於tcp和應用層之間。那麽它代表啥意思呢?簡明的說,數