一、什麼是__call方法
__call方法是一個PHP魔術方法,可以在對象中調用一個不存在的方法時自動調用。當程序發現對象沒有定義某個方法時,就會嘗試調用名為__call的方法,如果對象中有__call方法,則會調用__call方法,把不存在的方法名和參數,以數組的形式傳遞給__call方法。
根據傳遞的參數,程序可以自由實現其它的操作方法。
二、__call方法的應用場合
__call方法通常應用於大型面向對象程序中,有利於代碼可維護性、減少代碼工作量。
它可用於動態給對象註冊方法,或是實現調用方式與方法名前綴不同的方法。
三、__call方法的用法示例
以下示例為動態給一個對象添加方法的實現:
<?php
class Person {
private $name;
private $age;
public function __construct($name, $age) {
$this->name = $name;
$this->age = $age;
}
public function __call($method, $args) {
if (strpos($method, "get") !== false) {
$property = strtolower(str_replace("get", "", $method));
if (property_exists($this, $property)) {
return $this->$property;
}
}
elseif (strpos($method, "set") !== false) {
$property = strtolower(str_replace("set", "", $method));
if (property_exists($this, $property)) {
$this->$property = $args[0];
}
}
}
}
$person = new Person("Tom", 25);
echo $person->getName(); // 輸出Tom
echo $person->getAge(); // 輸出25
$person->setName("Jerry");
echo $person->getName(); // 輸出Jerry
?>
上例中,如果調用了類中不存在的方法,__call方法將根據方法名前綴是get還是set,來讀取或者設置相應的屬性。
四、__call方法的注意事項
在使用__call方法時應該注意以下事項:
- __call方法用於處理調用不存在的方法,不適用於調用私有方法。
- 調用不存在的方法時,方法名和參數是以數組的形式傳遞給__call方法,且只傳遞了一個數組參數,可以使用數組操作函數來進行處理。
- 為了能夠更好的維護代碼,應該在__call方法中設置根據需求調用相應的方法,而不是直接返回空。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/193661.html
微信掃一掃
支付寶掃一掃