PHP魔術方法(Magic Methods)是類中一些特殊的方法,它們在特定的情況下會被自動調用。這些方法以雙下劃線開頭和結尾,例如 __construct
、__get
、__set
等。魔術方法使得開發者可以自定義類的行為,而無需修改類的內部實現。以下是一些常見的PHP魔術方法及其用途:
__construct
:構造函數,當創建類的新實例時自動調用。用于初始化對象的屬性和執行其他設置操作。class MyClass {
public function __construct($param1, $param2) {
$this->property1 = $param1;
$this->property2 = $param2;
}
}
__get
:當訪問類的非靜態屬性時自動調用。用于在訪問屬性時執行某些操作,例如驗證屬性值或返回默認值。class MyClass {
private $property;
public function __get($property) {
if ($property === 'property') {
return $this->property;
}
return null;
}
}
__set
:當給類的非靜態屬性賦值時自動調用。用于在設置屬性時執行某些操作,例如驗證屬性值或執行其他設置操作。class MyClass {
private $property;
public function __set($property, $value) {
if ($property === 'property') {
$this->property = $value;
} else {
throw new InvalidArgumentException("Invalid property: " . $property);
}
}
}
__isset
:當使用 isset()
函數檢查類的屬性是否存在時自動調用。用于自定義屬性存在性檢查的行為。class MyClass {
private $property;
public function __isset($property) {
return isset($this->property);
}
}
__unset
:當使用 unset()
函數銷毀類的屬性時自動調用。用于自定義屬性銷毀時的行為。class MyClass {
private $property;
public function __unset($property) {
unset($this->property);
}
}
__call
:當嘗試調用類中不存在的方法時自動調用。用于自定義方法調用失敗時的行為,例如返回默認值或拋出異常。class MyClass {
public function __call($method, $args) {
if ($method === 'nonExistentMethod') {
return "Method not found: " . $method;
}
throw new BadMethodCallException("Method not found: " . $method);
}
}
__invoke
:當嘗試將類的實例作為函數調用時自動調用。用于自定義實例調用時的行為。class MyClass {
public function __invoke($param1, $param2) {
echo "Invoking MyClass with parameters: " . $param1 . ", " . $param2;
}
}
__toString
:當嘗試將類的實例轉換為字符串時自動調用。用于自定義實例轉換為字符串時的行為,例如返回對象的名稱或其他描述信息。class MyClass {
public function __toString() {
return "MyClass instance";
}
}
__clone
:當使用 clone
關鍵字克隆類的實例時自動調用。用于自定義實例克隆時的行為,例如重置某些屬性或執行其他操作。class MyClass {
public function __clone() {
$this->property = "Cloned property";
}
}
__wakeup
:當使用 unserialize()
函數反序列化類的實例時自動調用。用于自定義實例反序列化時的行為,例如重置某些屬性或執行其他操作。class MyClass {
public function __wakeup() {
$this->property = "Deserialized property";
}
}