当前位置:  开发笔记 > 编程语言 > 正文

什么时候/我应该在PHP中使用__construct(),__ get(),__ set()和__call()?

如何解决《什么时候/我应该在PHP中使用__construct(),__get(),__set()和__call()?》经验,为你挑选了2个好方法。

一个类似的问题讨论__construct,但我把它留在我的头衔,搜索谁找到这个.

显然,__ get和__set采用的参数是获取或设置的变量.但是,您必须知道变量名称(例如,知道该人的年龄是$ age而不是$ myAge).因此,如果您必须知道变量名称,我不明白这一点,特别是如果您正在使用您不熟悉的代码(例如库).

我发现一些网页解释__get(),__set()__call(),但我仍然不知道为什么,或者当它们是有用的.



1> 小智..:

这个页面可能会有用.(注意你所说的不正确 - __set()将变量的名称和值作为参数.__get()只需要变量的名称).

__get()并且__set()在您希望提供对变量的泛型访问的库函数中很有用.例如,在ActiveRecord类中,您可能希望人们能够将数据库字段作为对象属性进行访问.例如,在Kohana PHP框架中,您可以使用:

$user = ORM::factory('user', 1);
$email = $user->email_address;

这是通过使用__get()和完成的__set().

使用时可以完成类似的事情__call(),即您可以检测到有人在调用getProperty()和setProperty()并相应地处理.



2> Peter Bailey..:

__get(),__ set()和__call()是PHP所谓的"魔术方法",这是一个绰号我觉得有点傻 - 我认为"钩子"更容易.无论如何,我离题了......

这些的目的是为访问在对象上定义的数据名称(属性或方法)提供执行案例,这可用于各种"聪明"的思考,如变量隐藏,消息转发等.

然而,有一个成本 - 调用它们的调用比定义的数据库调用慢大约10倍.


你对它的速度有什么参考吗?不是说我不相信你(因为我这样做),但我希望不是.
推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有