__construct(): 类的布局函数。当一个工具被创建时自动调用。
__destruct(): 类的析构函数。当一个工具被销毁时自动调用。
__get($name): 在读取一个不可访问属性的值时自动调用。

__set($name, $value): 在给一个不可访问属性赋值时自动调用。
__isset($name): 在对不可访问属性调用 isset() 或 empty() 函数时自动调用。
__unset($name): 在对不可访问属性调用 unset() 函数时自动调用。
__call($name, $arguments): 在调用一个不存在或不可访问的方法时自动调用。
__callstatic($name, $arguments): 在调用一个不存在或不可访问的静态方法时自动调用。
__toString(): 在将工具作为字符串输出时自动调用。
__invoke($arguments): 当考试测验将工具作为函数调用时自动调用。
__clone(): 当工具被克隆时自动调用。
__debugInfo(): 在利用 var_dump() 函数输出工具信息时自动调用。
__serialize(): 在工具被序列化时自动调用。
__unserialize($data): 在工具被反序列化时自动调用。
__sleep(): 在工具被序列化时自动调用,返回要序列化的属性列表。
__wakeup(): 在工具被反序列化时自动调用。
由于php8有浩瀚的魔术方法,本文也不会逐一详细解释了,本文以__set()和__get()方法来详细讲解。
由于面向工具思想并不鼓励直接从类的外部访问类的属性,以强调封装性,以是可以利用__get 和__set 方法来达到此目的。无论何时,类属性被访问和操作时,访问方法都会被引发。通过利用它们,可以避免直接对类属性进行访问。
(1)当程序试图写入一个没有定义或不可见的成员变量时,PHP就会实行__set()方法。该方法包含两个参数,分别表示变量名称和变量值。
(2) 当程序调用一个没有定义或不可见的成员变量时,PHP就会实行__get()方法来读取变量值。该方法包含一个参数,表示要调用变量的名称。
利用__set()和__get()方法,参考代码:
<?php class Fruit{ function __set($names,$value){ $this->$names = $value; } function __get($names){ return $this->$names; } }; $a = new Fruit (); $a->name = "梨子"; $a->price = "3.88元"; echo $a->name."的价格为:".$a->price."<br />"; $b = new Fruit(); $b->name = "火龙果"; $b->num="666公斤"; $b->price= "4.88元"; echo $b->name."的库存为:".$b->num.",价格为: ".$b->price."<br />";?>
以上代码在PHP8中的运行结果如下:
梨子的价格为:3.88元火龙果的库存为:666公斤,价格为: 4.88元
上面代码中,变量name、price、num都是没有定义成员变量,以是此时会调用__set()和__get()方法。