【问题标题】:What is the best way to access a class properties in php - magic methods or hardcoding setter & getters [duplicate]在php中访问类属性的最佳方法是什么-魔术方法或硬编码setter和getter [重复]
【发布时间】:2013-05-16 12:05:23
【问题描述】:

访问 PHP 类的属性的最佳方式是什么?我可以使用内置的 php 访问器魔术方法,或者我应该硬编码 get*()set*() 方法。当我在处理大型代码库时,以后重构代码最有效和最好的方法是什么。我要求这个非常大的代码库。将其视为社交网络的发展。

【问题讨论】:

    标签: php oop social-networking


    【解决方案1】:

    如果我不知道这样做的目的,我无法说出什么是更好或更坏。

    在我看来,最好使用专用的 getter/setter,而不是编码 __get()__set() 魔术方法。

    出于两个原因:

    1. 我的 IDE 不会自动完成以魔术方法编码的伪属性。我不知道该属性应该是什么类型,即使有同名的。
    2. 当我需要更改 getter/setter 的行为时,很容易找到它的位置。我只更改方法代码,而不是大的__get()__set()

    有时我会使用类似的东西

    public function __get($name){ // no error handling, but should be some
      return $this->{'get'.$name}();
    }
    

    还有吸气剂

    public function getX(){ ...}
    public function getY(){ ...}
    

    等等。

    这让我可以缩短打字时间,但将所有内容留给 getter。

    调用伪属性对我来说也有一些缺点,因为任何警告/错误/异常/...都将在 __get() 方法中发送,而不是在 getter 中发送——我不知道$name 给出了什么等等。

    编辑

    使用专用方法获取和设置属性在继承中也更加清晰。记录软件可以标记 getter 已被覆盖,所以我知道哪个类更改了代码,以及哪个使用了它的祖先的代码。在__get() 中,如果我更改$name 的代码,它将被标记为已覆盖,例如。 “坐标”,但我不更改“海平面”(我的意思是并不总是清楚被覆盖的内容)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-25
      • 1970-01-01
      相关资源
      最近更新 更多