一、什麼是__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-hant/n/193661.html