php多態代碼實例(php有多態嗎)

本文目錄一覽:

為啥PHP的多態是假多態?

1.多態是指在面向對象中能夠根據使用類的上下文來重新定義或改變類的性質和行為。

2.PHP不支持重載實現多態,但是PHP可以變向的實現多態效果。

3.php其語法特點,不支持固定變數類型,它是根據上下文來確定當前的類型是什麼,即,最後一次賦值是什麼類型,現在它就是什麼類型。也就不存在將子類

變數賦給基類變數的說法。但php函數的參數,是可以規定類型的,如下面的show函數。如果傳遞一個不是此類型的參數,將會在運行時報錯。

代碼如下:

?php

 

/**

 * 虛基類

 */

abstract class T{

    abstract function show();

}

 

/**

 * 子類

 */

class T1 extends T {

    public function show(){

        echo “T1 from abstract class!br/”;

    }

    public function show1(){

        echo “T1 not from abstract class!br/”;

    }

}

 

/**

 * 子類

 */

class T2 extends T {

    public function show(){

        echo “T2 from abstract class!br/”;

    }

    public function show1(){

        echo “T2 not from abstract class!br/”;

    }

}

 

class T3 {

    public function show(){

        echo “in T3!br/”;

    }

    public function show1(){

        echo “in T3!br/”;

    }

}

 

$t1 = new T1();

$t2 = new T2();

$t3 = new T3();

 

show($t1);

show($t2);

 

//報錯,$t3不是T,所以被show函數調用的時候,會報類型不對的錯誤

//show($t3);

 

function show( T $t ){//注意參數的類型

    $t-show();

    $t-show1();

}

?

php 多態 有什麼用

多態性,其來自於dictionary.com的定義是”以不同形式,階段或者類型出現在獨立的組織中或者同種組織中,而不存在根本區別。”由該定義, 我們可以認為,多態性是一種通過多種狀態或階段來描述相同對象的編程方式。其實,它的真正意義在於:實際開發中,我們只需要關注一個介面或基類的編程,而 不必擔心一個對象所屬於的具體類(class)。

如果你熟悉設計模式,即使只是有個初步了解,那麼你也會了解這個概念。事實上,多態 性可能是基於模式設計編程中的最偉大的工具。它允許我們以一種邏輯的方式來組織相類似的對象從而實現在具體編碼時不必擔心對象的具體類型;而且,我們只需 要對一個所期望的介面或基類編程即可。一個應用程序越抽象,則它就顯得越靈活–而多態性是對行為加以抽象的最好的方式之一。

例如, 讓我們考慮一個叫Person的類。我們可以用稱為David,Charles和Alejandro的類來子類化Person。Person有一個抽象方 法AcceptFeedback(),所有的子類都要實現這個方法。這意味著,任何使用基類Person的子類的代碼都能調用方法 AcceptFeedback()。你不必檢查該對象是一個David還是一個Alejandro,僅知道它是一個Person就夠了。結果是,你的代碼 只需關注”最小公分母”-Person類即可。

在這個示例中的Person類也可以被創建為一個介面。當然,與上面相比存在一些區 別,主要在於:一個介面並沒有給出任何行為,而僅確定了一組規則。一個Person介面要求的是”你必須支持AddFeedback()方法”,而一個 Person類可以提供一些AddFeedback()方法的預設代碼-你對之的理解可以是”如果你不選擇支持AddFeedback(),那麼你應該提 供一種預設實現。”至於如何選擇介面或基類則並非本文的主題;但是,一般說來,你需要通過基類來實現一個預設的方法。如果你能夠簡單地勾勒出你的類所要實 現的一組期望的功能,那麼你也可以使用一個介面。

PHP多態代碼實例

這篇文章主要介紹了PHP多態代碼實例,本文用2個代碼實例來演示PHP中的多態,需要的朋友可以參考下

多態定義:只關心一個介面或者基類,而不關心一個對象的具體類。(同一類型,不同結果)

這裡兩個例子:

第一個,我們發現,基類定義了標準,子類進行了自我規則的實現。這是多態的一個要求。同時,這是滿足重寫;實際上這是不同類的不同表現;沒有嚴格滿足一個介面,或者基類編程。因為你調用的時候不是

stu-showGrade()

而是各自自己的方法;

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

class

stu{

public

function

showGrade(){

echo

base

class;

}

}

class

xiaomin

extends

stu{

public

function

showGrade(){

echo

is

son

show

80;

}

}

class

xiaoli

extends

stu{

public

function

showGrade(){

echo

is

son

show

60;

}

}

function

doit($obj){

if(get_class($obj)

!=

stu){

$obj-showGrade();

}

}

doit(new

xiaoli());

doit(new

xiaomin());

第二個例子:dovoice

參數規定了$obj

為animal,意識就是用介面

接受了

實現類對象。了向上轉型。這就符合同一類型,不同結果了,這就是多態;

實際上在Java中

會是

animal

a

=

new

dog();這樣子的;因為PHP

是若類型語言。沒有對象轉型機制。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

interface

animal{

public

function

voice();

}

class

cat

implements

animal{

public

function

voice(){

echo

miao~~~br;

}

}

class

dog

implements

animal{

public

function

voice(){

echo

wang

~~~br;

}

}

function

dovoice(animal

$obj){

$obj-voice();

}

dovoice(new

dog());

dovoice(new

cat());

PHP中多態如何實現

用trait,定義類,在被繼承的類中,use,定義的trait類。

ps:use,可以多個,就是php中簡單的多態的實現

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/297196.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-28 12:15
下一篇 2024-12-28 12:15

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • Python字元串寬度不限制怎麼打代碼

    本文將為大家詳細介紹Python字元串寬度不限制時如何打代碼的幾個方面。 一、保持代碼風格的統一 在Python字元串寬度不限制的情況下,我們可以寫出很長很長的一行代碼。但是,為了…

    編程 2025-04-29
  • Python基礎代碼用法介紹

    本文將從多個方面對Python基礎代碼進行解析和詳細闡述,力求讓讀者深刻理解Python基礎代碼。通過本文的學習,相信大家對Python的學習和應用會更加輕鬆和高效。 一、變數和數…

    編程 2025-04-29
  • Python生成隨機數的應用和實例

    本文將向您介紹如何使用Python生成50個60到100之間的隨機數,並將列舉使用隨機數的幾個實際應用場景。 一、生成隨機數的代碼示例 import random # 生成50個6…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • 倉庫管理系統代碼設計Python

    這篇文章將詳細探討如何設計一個基於Python的倉庫管理系統。 一、基本需求 在著手設計之前,我們首先需要確定倉庫管理系統的基本需求。 我們可以將需求分為以下幾個方面: 1、庫存管…

    編程 2025-04-29
  • 寫代碼新手教程

    本文將從語言選擇、學習方法、編碼規範以及常見問題解答等多個方面,為編程新手提供實用、簡明的教程。 一、語言選擇 作為編程新手,選擇一門編程語言是很關鍵的一步。以下是幾個有代表性的編…

    編程 2025-04-29
  • Python實現簡易心形代碼

    在這個文章中,我們將會介紹如何用Python語言編寫一個非常簡單的代碼來生成一個心形圖案。我們將會從安裝Python開始介紹,逐步深入了解如何實現這一任務。 一、安裝Python …

    編程 2025-04-29
  • 怎麼寫不影響Python運行的長段代碼

    在Python編程的過程中,我們不可避免地需要編寫一些長段代碼,包括函數、類、複雜的控制語句等等。在編寫這些代碼時,我們需要考慮代碼可讀性、易用性以及對Python運行性能的影響。…

    編程 2025-04-29

發表回復

登錄後才能評論