PHP 中的重載

王林
發布: 2024-08-29 12:56:56
原創
926 人瀏覽過

在 PHP 中,我們有不同的物件導向程式設計概念,如類別、物件、封裝、多態性等。重載也是PHP中OOP的概念。函數重載或方法重載是一種允許建立多個同名方法的功能,這些方法的輸入參數類型各不相同。它簡單地定義為一個函數執行不同任務的能力。

一行中重載的定義:「名稱相同,但實作不同。」

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

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

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

重載在 PHP 中是如何運作的?

眾所周知,方法重載是在函數上執行的。因此,可以根據傳遞給每個函數的參數使用不同的實作來重載函數。例如,要求圓的面積,如果給定半徑,則為pi *r *r;要求正方形的面積,如果給定邊長,則為side * side,則三角形的面積為(底邊) * 高度) / 2 提供基礎長度並給予高度等等。

重載概念需要 Magic 方法。

魔術方法以 __(雙底線)開頭,並由 PHP 自動呼叫。此外,它們總是在類別內部定義,而不是在類別外部定義。不同的魔術方法有 __get()、__set、__construct()、__destruct()、__call()、__callStatic()、__isset()、__unset()、

重載執行時會動態建立屬性和方法,它們統稱為實體。

實體又稱為

  • 屬性:資料成員
  • 方法:資料函數

讓我們看看魔術方法如何使用 __call() 方法來運作

<?php
class Test{
private $a = array('one','two','three');
public function__call($method, $args) {
print "Method $method called:\n";
echo "<pre class="brush:php;toolbar:false">";
print_r($args);
return $this->a;
}
}
$obj = new Test();
$a = obj->anyMethod(1, 2, 3);
var_dump($a);
?>
登入後複製

PHP 中的重載

在上面的例子中,我們宣告了一個名為 Test 的類別,它具有私有屬性和 __call 方法。兩個參數傳遞給 __call 方法。在 __call 方法中,我們使用了 print() 語句、var_dump 參數和傳回值 x。

然後建立名為 obj 的類別的對象,並使用該物件呼叫一個未定義的方法,因為該方法不存在,而是呼叫 __call() 。

PHP 中的重載型

PHP 中的重載有兩種類型,讓我們詳細了解每種類型。

  • 屬性超載
  • 方法重載

1) 屬性重載

屬性重載會在設定物件時建立動態屬性。此屬性與類別實例相關聯,如果該屬性未在類別的範圍內聲明,則視為重載屬性。為此,您無需編寫任何額外的程式碼。下面的魔法方法告訴我們更多關於同樣的事情。

下面提到的是使用重載屬性執行的操作

Setter 和 Getter 重載屬性(使用 __set() 和 __get())

評估重載屬性設定(使用 __isset())

撤銷此類屬性設定(使用 __unset())

讓我們來了解這些方法的用途

__set() =>;用來初始化重載屬性。

__get() =>;用來取得已初始化的屬性

__isset() =>;用於檢查屬性是否設定

__unset() =>;用於取消設定屬性。

__call() =>;用來初始化重載方法

__callStatic() =>; 用來初始化靜態方法

以下範例中將使用以上所有方法。

代碼:

class PropertyOverloading {
public $details = array();
//declaring private property
private $j=20;
// setter operation
public function __set($name, $value) {
echo "<br />". " In the Setting operation. Set '$name = $value'";
$this->details[$name] = $value;
}
// getter operation
public function __get($name) {
echo "<br />". " In the Getting Operation. Get '$name  = '";
return $this->details[$name] . ' <br /> ';
}
// isset operation
public function __isset($name) {
echo "<br />". " In the isset Operation. isset '$name' ?";
return isset($this->details[$name]);
}
// unset operation
public function __unset($name) {
echo "<br />". " In the unset Operation. unset '$name' ";
unset($this->details[$name]);
}
// returning private property value
public function getPrivateProperty() {
return "<br />". " j = ".$this->j;
}
}
// creating object of class PropertyOverloading
// setter and getter methods are called
$obj = new PropertyOverloading();
$obj->x = 10;
echo $obj->x;
//call isset method
var_dump(isset($obj->x));
//call unset method
unset($obj->x);
//check whether object x is unset or not
var_dump(isset($obj->x));
//getting method to access the private property
echo "<br />". $obj-> getPrivateProperty();
//calling directly the private property
// throws error
echo "<br />accessing the private property, throws error";
echo "<br />".$obj->j;
登入後複製

代碼:

PHP 中的重載

輸出

PHP 中的重載

2) 方法重載

與屬性重載一樣,方法重載建立一個在類別範圍之外宣告的動態方法。這可以透過 __call() 和 __callStatic() 魔術方法來實現。它們分別基於物件引用和靜態引用來使用。

__call() ->用於呼叫物件參考中的重載方法

__callStatic() ->用於呼叫靜態引用中的重載方法

以下範例將幫助您了解更多資訊。

<?php
class MethodOverloading
{
public function __call($name,$param){
echo "--With object reference <br/>";
}
public static function __callStatic($name,$param){
echo "-----With static reference <br/>";
}
}
// creating object of class MethodOverloading
$obj = new MethodOverloading;
echo "Method Overloading <br/>";
// using the object reference
$obj->DemoTest();
// using the static reference
MethodOverloading::DemoTest();
?>
登入後複製

代碼:

PHP 中的重載

輸出:

PHP 中的重載

規則

1) 公共存取說明符用於重載方法。

2) 使用重載過程,其中未在類別範圍內定義的屬性或方法可以在建立類別的物件時存取。

3) 魔術方法用於重載屬性或方法。在用於重載方法的兩個魔術方法中,使用最多的是物件上下文中的 __call() 方法,較少使用的是靜態上下文中使用的 __callStatic() 方法。

推薦文章

這是 PHP 重載指南。在這裡,我們透過範例討論 PHP 中重載的類型和概念。您也可以看看下面的文章來了解更多 –

  1. 什麼是 PHP 陣列?
  2. C# 中的重載
  3. C++ 中的重載
  4. C# 中的重載與重寫

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

相關標籤:
php
來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板