接續上一篇,本文深入說明 PHP 物件導向中的方法多載,透過 __call() 與 __callStatic() 魔術方法處理不可存取的方法呼叫。
<?php
class Student {
public $name = 'php';
public $age = 10;
public function sayName() {
return $this->name;
}
/**
* @param string $method_name 方法名稱
* @param array $method_arguments 呼叫參數
*/
public function __call($method_name, $method_arguments) {
echo "<br>抱歉,您呼叫的方法 $method_name 不存在!建議呼叫 sayName() 方法。";
$this->defaultAction(); // 執行預設動作
}
public function defaultAction() {
echo "<br>這裡是預設動作!可實作導向、記錄等邏輯。";
}
public static function __callStatic($m_name, $m_args) {
echo "<br>這裡是靜態方法多載處理:$m_name";
}
}
// 測試
$student = new Student();
$student->nonExistMethod(); // 觸發 __call
Student::sayCounter(); // 觸發 __callStatic
?>
抱歉,您呼叫的方法 nonExistMethod 不存在!建議呼叫 sayName() 方法。
這裡是預設動作!可實作導向、記錄等邏輯。
這裡是靜態方法多載處理:sayCounter
__call 僅處理物件方法呼叫,__callStatic 處理靜態呼叫(需 PHP 5.3+)。