A similar question discusses __construct
,但我将其保留在我的标题中,以供搜索找到此内容的人使用。
显然,__get 和 __set 接受一个参数,该参数是正在获取或设置的变量。但是,您必须知道变量名称(例如,知道此人的年龄是 $age 而不是 $myAge)。因此,如果您必须知道变量名,我不明白这一点,尤其是当您使用您不熟悉的代码(例如库)时。
我找到了一些解释 __get()
的页面, __set()
, 和 __call()
,但我仍然不明白为什么或什么时候它们有用。
最佳答案
This page可能会有用。 (请注意,您说的是不正确的 - __set()
将变量名称和值作为参数。__get()
仅采用变量名称).
__get()
和 __set()
在您希望提供对变量的通用访问的库函数中很有用。例如,在 ActiveRecord 类中,您可能希望人们能够将数据库字段作为对象属性进行访问。例如,在 Kohana PHP 框架中,您可能会使用:
$user = ORM::factory('user', 1);
$email = $user->email_address;
这是通过使用 __get()
和 __set()
完成的。
使用 __call()
可以完成类似的事情,即您可以检测何时有人调用 getProperty() 和 setProperty() 并进行相应处理。
关于php - 我什么时候/应该在 PHP 中使用 __construct()、__get()、__set() 和 __call()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/250616/