PHP __get和__set魔术方法-为什么我们在这里需要这些方法?
|
在http://framework.zend.com/manual/en/learning.quickstart.create-model.html的Zend快速入门指南上,我们可以看到:
class Application_Model_Guestbook
{
protected $_comment;
protected $_created;
protected $_email;
protected $_id;
public function __set($name, $value);
public function __get($name);
public function setComment($text);
public function getComment();
...
我通常在没有任何魔术方法的情况下创建我的getter和setter方法。我已经在快速指南中看到了这一点,但我不明白为什么我们需要这样做。
谁能帮我吗?
非常感谢
没有找到相关结果
已邀请:
5 个回复
旗低饶彤
或
。如果
不可见并且
存在,3ѭ将自动调用
。 在您链接的教程中,对getter和setter进行了设置,以自动调用相应的单个get / set函数。因此,
将间接称为
。这不是必需的……只是一种方便。 在其他情况下,ѭ2可以用于创建看起来像只读变量的东西。
戊袱
和
。通过使用PHP的“魔术方法” setter / getter,您不必为每个属性编写单独的方法。您可以像设置公共属性一样设置/获取属性。在重载函数中,添加特定于每个属性的逻辑。例:
现在,我可以使用
设置或获取评论。 为了在不使用重载的情况下实现上述功能,我不得不编写4种不同的方法。无论是在实际文件方面还是在为项目中的对象创建标准化接口方面,这实际上都是关于代码组织的。 我个人更喜欢照做,为需要复杂的getter / setter的每个属性编写单独的方法。对我来说,它的组织更加清晰,并且对象的“简单”属性与具有更大复杂性或一对多关系的那些属性之间存在明显的分隔。
遣莫捅炭
和
魔术方法的存在有两个原因: 这样您就不必花费时间为所有属性创建香草访问器方法。 允许您实现属性重载。 如果您的属性需要特殊处理,那么魔术方法不适合您。但是,如果您的属性仅包含数据且没有依赖关系,则没有理由不使用魔术方法。
广躺椽
和
方法,以便您了解它们在那里的原因。 进行这样的魔术处理可以使您做一些整洁的事情,例如甚至设置“只读”属性,还可以防止您因一堆杂乱的getter / setter而使您的班级膨胀。
佃蒜狗掂哥
中调用特定的
来避免此问题(感谢cHao提供小费)。 例: