在 PHP 中,我們有不同的物件導向程式設計概念,如類別、物件、封裝、多態性等。重載也是PHP中OOP的概念。函數重載或方法重載是一種允許建立多個同名方法的功能,這些方法的輸入參數類型各不相同。它簡單地定義為一個函數執行不同任務的能力。
一行中重載的定義:「名稱相同,但實作不同。」
廣告 該類別中的熱門課程 PHP 開發人員 - 專業化 | 8 門課程系列 | 3次模擬測驗開始您的免費軟體開發課程
網頁開發、程式語言、軟體測試及其他
眾所周知,方法重載是在函數上執行的。因此,可以根據傳遞給每個函數的參數使用不同的實作來重載函數。例如,要求圓的面積,如果給定半徑,則為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); ?>
在上面的例子中,我們宣告了一個名為 Test 的類別,它具有私有屬性和 __call 方法。兩個參數傳遞給 __call 方法。在 __call 方法中,我們使用了 print() 語句、var_dump 參數和傳回值 x。
然後建立名為 obj 的類別的對象,並使用該物件呼叫一個未定義的方法,因為該方法不存在,而是呼叫 __call() 。
PHP 中的重載有兩種類型,讓我們詳細了解每種類型。
屬性重載會在設定物件時建立動態屬性。此屬性與類別實例相關聯,如果該屬性未在類別的範圍內聲明,則視為重載屬性。為此,您無需編寫任何額外的程式碼。下面的魔法方法告訴我們更多關於同樣的事情。
下面提到的是使用重載屬性執行的操作
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;
代碼:
輸出
與屬性重載一樣,方法重載建立一個在類別範圍之外宣告的動態方法。這可以透過 __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(); ?>
代碼:
輸出:
1) 公共存取說明符用於重載方法。
2) 使用重載過程,其中未在類別範圍內定義的屬性或方法可以在建立類別的物件時存取。
3) 魔術方法用於重載屬性或方法。在用於重載方法的兩個魔術方法中,使用最多的是物件上下文中的 __call() 方法,較少使用的是靜態上下文中使用的 __callStatic() 方法。
這是 PHP 重載指南。在這裡,我們透過範例討論 PHP 中重載的類型和概念。您也可以看看下面的文章來了解更多 –
以上是PHP 中的重載的詳細內容。更多資訊請關注PHP中文網其他相關文章!