php - 我什么时候/应该在 PHP 中使用 __construct()、__get()、__set() 和 __call()?

标签 php magic-function

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/

相关文章:

php - 无法用默认值替换字符串

php - 命名空间不适用于 php 中的 __autoload 魔法函数

python - Python 中的 %timeit 是什么?

python - 我想知道为什么魔法功能对特定运算符(operator)给出特定答案

python 内置函数与魔术函数和覆盖

python - Mercurial/Python - 下划线函数有什么作用?

php - codeigniter:使用 htaccess 保护 Controller

php - 实体类中的 Getter & Setter + Symfony2

php - Laravel 集合键修改

javascript - 如何下载带有文档 mime 类型的图像?