當前位置: 首頁> 最新文章列表> PHP 重載基礎知識概述與應用解析

PHP 重載基礎知識概述與應用解析

gitbox 2025-06-28

什麼是PHP重載

PHP是一種動態類型語言,意味著變量在腳本執行時不需要預定義類型,同時函數也可以沒有參數類型或返回類型。 PHP重載指的是在運行時動態創建或修改類的屬性和方法。

PHP支持兩種主要的重載形式:

1. 屬性重載:通過魔術方法__get()__set() ,可以動態地訪問或設置類的屬性。

2. 方法重載:通過魔術方法__call()__callStatic() ,可以動態地調用類的方法。

屬性重載

__get()方法

當訪問一個不存在的屬性時, __get()方法會被調用。通過該魔術方法,可以動態添加屬性。

 
class Test {
  private $data = [
    'name' => 'Tom',
    'age' => 18
  ];

  public function __get($name) {
    if (isset($this->data[$name])) {
      return $this->data[$name];
    }
    return null;
  }
}

$test = new Test();
echo $test->name;  // 輸出 Tom
echo $test->age;   // 輸出 18
echo $test->gender;  // 輸出 null

__get()方法接受一個參數$name ,即屬性名。如果該屬性不存在,則返回null

__set()方法

當給一個不存在的屬性賦值時, __set()方法會被觸發。通過該魔術方法,可以動態地添加一個屬性及其值。

 
class Test {
  private $data = [];

  public function __set($name, $value) {
    $this->data[$name] = $value;
  }
}

$test = new Test();
$test->name = 'Tom';
echo $test->name;  // 輸出 Tom

__set()方法接受兩個參數: $name (屬性名)和$value (屬性值)。

方法重載

__call()方法

當調用一個不存在的方法時, __call()方法會被調用。通過該魔術方法,可以動態地添加方法。

 
class Test {
  public function __call($name, $arguments) {
    if ($name == 'add') {
      return array_sum($arguments);
    }
    return null;
  }
}

$test = new Test();
echo $test->add(1, 2, 3);  // 輸出 6
echo $test->subtract(10, 2);  // 輸出 null

__call()方法接受兩個參數: $name (方法名)和$arguments (方法參數)。如果該方法不存在,則返回null

__callStatic()方法

當調用一個不存在的靜態方法時, __callStatic()方法會被調用。該方法與__call()方法類似,只不過它用於靜態方法。

 
class Test {
  public static function __callStatic($name, $arguments) {
    if ($name == 'add') {
      return array_sum($arguments);
    }
    return null;
  }
}

echo Test::add(1, 2, 3);  // 輸出 6
echo Test::subtract(10, 2);  // 輸出 null

__callStatic()方法與__call()方法類似,但只適用於靜態方法。