首頁  >  文章  >  後端開發  >  PHP 中的多態性

PHP 中的多態性

PHPz
PHPz原創
2024-08-29 13:05:50450瀏覽

多態性是 PHP 物件導向程式語言特性(OOPS 特性)的好概念之一。多態性一詞其實源自於兩個希臘文「Poly」和「Morph」。 Poly 的意思是“許多”,morph 的意思是“形式”。它意味著具有多種形式的能力。一般來說,多態性是一種物件導向的程式模式,其中類別具有各種功能,同時具有公共介面。實際上多態有兩種類型:編譯時多型和執行時多型。 PHP 不支援編譯時多態性,這表示函數和運算子重載。

廣告 該類別中的熱門課程 PHP 開發人員 - 專業化 | 8 門課程系列 | 3次模擬測驗

開始您的免費軟體開發課程

網頁開發、程式語言、軟體測試及其他

文法:

Class a{
//methods
Public function b(){
//methods
}
}
Class b extends a{
//methods
Public function b(){
//methods which are in/not in the function of the class a.
}
}

說明:

在上面的語法中,我們創建了 2 個類,一個是普通類,另一個是擴展類,但我們使用相同的函數名稱/方法來實現不同的功能。這稱為多變形。在編碼中可以根據需要使用許多具有不同功能的類似名稱的函數/方法。

PHP 中的多態函數

PHP 的多態性是基於運行時多態性概念。在PHP 中,多態性是透過在運行時做出決定來工作的,這實際上不是編譯時多態性概念,否則我們可以說我們有許多/多個實現,它們是超類別的子類型,運行時(函數重載)概念是一個PHP 程式語言多態性的範例。

函數重載是指從新創建的函數派生出一個類,該函數在其父類中具有相同的簽名(這意味著該函數具有相同的名稱、相同的類型和多個參數)作為函數,稱為方法重寫。在多態概念中,可以透過擴展來建立函數,但必須涉及相同名稱/相似命名的函數,以便處理多態和繼承概念。為了透過增加類別的功能來增強程式設計能力,具有公共介面的多態性是必須的。

在 PHP 中實現多態性的範例

以下是 PHP 中多態性的範例:

範例#1

在下面的範例中,建立了一個基底類別「Shap1」。這裡我們要繼承三個衍生類別中的Shap1類別。類別名稱為 Circle1、Triangle1 和 Elliipse1。每個類別都有draw函數,以完成PHP程式語言的運行時多態性。在下面的呼叫過程中,我們將建立一個長度為2的數組,每個數組的索引有助於建立一個類別的物件。之後,我們將使用一個循環,該循環將根據數組的長度執行,該數組的值「$i1」傳遞給物件數組變數「$Val1[$i1]」。所以它會被執行3次,並且會使用每個類別的draw()方法來呼叫它。

代碼:

<?php
class Shap1
{
function draw1(){}
}
class Circle1 extends Shap1
{
function draw1()
{
print "Circle1 has been drawn.\n";
}
}
class Triangle1 extends Shap1
{
function draw1()
{
print "Triangle1 has been drawn.\n";
}
}
class Ellipse1 extends Shap1
{
function draw1()
{
print "Ellipse1 has been drawn.";
}
}
$Val1=array(2);
$Val1[0]=new Circle1();
$Val1[1]=new Triangle1();
$Val1[2]=new Ellipse1();
for($i1=0;$i1<3;$i1++)
{
$Val1[$i1]->draw1();
}
?>

輸出:

PHP 中的多態性

範例#2

這是透過介面幫助實現多態性概念的範例。介面與任何類別非常相似,除了不包含任何程式碼。此介面有助於定義方法名稱和方法參數,但這裡不會定義方法的內容。任何類別執行的介面都必須由該介面所表徵的所有方法執行。

這裡 Machine1 將擁有定義 calcTask1 的所有類別。 Circle1 實作 CallTask​​1() 方法。 Rectangle1 也嘗試實作 Machine 接口,但使用不同的 calcTask1() 方法體進行定義。多態性表示所有計算任務的方法都應該有一個等效的名稱。我們將呼叫 calcTask1() 的不同名稱,但不提供詳細資訊。這裡計算任務的方法的名稱很重要。

代碼:

<?php
interface Machine1 {
public function calcTask1();
}
class Circle1 implements Machine1 {
private $radius1;
public function __construct($radius1){
$this -> radius1 = $radius1;
}
public function calcTask1(){
return $this -> radius1 * $this -> radius1 * pi();
}
}
class Rectangle1 implements Machine1 {
private $width1;
private $height1;
public function __construct($width1, $height1){
$this -> width1 = $width1;
$this -> height1 = $height1;
}
public function calcTask1(){
return $this -> width1 * $this -> height1;
}
}
$mycirc1 = new Circle1(3);
$myrect1 = new Rectangle1(3,4);
echo $mycirc1->calcTask1();
echo $myrect1->calcTask1();
?>

輸出:

PHP 中的多態性

Example #3

In the below example a class “base11” is created with a function add1() with $a1 and $b1 variables. Then “$res1” variable is created which is used to store the multiplication of the two variables “$a1” and “$b1” and the echo statement is used to print if the function is called. Then Child1 class is used to extend the base11 class. In the extended class, again add1() variable is created to store the sum or the a1 and b1 variables. Then a new object is created and called by passing the variable values to the values $a1 and $b1 variables.

Code:

<?php
class base11
{
function add1($a1,$b1)
{
$res1=$a1*$b1;
echo "Multiplication = ".$res1;
}
}
class child1 extends base11
{
function add1($a1,$b1)
{
$res1=$a1+$b1;
echo "Sum  = ".$res1;
}
}
$obj= new child1();
$obj->add1(1000,500);
?>

Output:

PHP 中的多態性

Example #4

In the below example a class “BaseClass11” is created with the public function “myMethod()” is created with the echo statement to mention that “BaseClass11 method” is called that. Then again DerivedClass11 is created to extend the BaseClass11 with the same name function “myMethod()” with the echo statement to print “DerivedClass11 method called” like that. We are calling the same/similar naming function in different classes. Then new object is created for the function/ method “myMethod()”.

Code:

<?php
class BaseClass11
{
public function myMethod11()
{
echo "BaseClass11 method called";
}
}
class DerivedClass11 extends BaseClass11
{
public function myMethod11()
{
echo "DerivedClass11 method called";
}
}
function processClass11(BaseClass11 $c11)
{
$c11->myMethod11();
}
$c11 = new DerivedClass11();
processClass11($c11);
?>

Output:

PHP 中的多態性

Recommended Article

This is a guide to the Polymorphism in PHP. Here we discuss the what is the definition of Polymorphism and its Working along with its examples as well as Code Implementation. You can also go through our other suggested articles to learn more-

  1. PHP Frameworks
  2. basename in PHP
  3. Validation in PHP
  4. print_r() in PHP

以上是PHP 中的多態性的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:PHP 內爆下一篇:PHP 內爆