在php中访问类属性的最佳方法是什么 - 魔术方法或硬编码设置器&干将

时间:2013-05-16 12:05:24

标签: php oop social-networking

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

1 个答案:

答案 0 :(得分:0)

如果我不知道它的目的,我不能说更好还是更坏。

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

出于以下两个原因:

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

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

    和getter一样

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

    等等。

    这可以让我缩短打字时间,但让所有人都能得到吸气。

    调用伪属性对我来说也有一些不利之处,因为任何警告/错误/异常/ ...都会在__get()方法中发送,而不是在getter中发送 - 我不知道是什么{{1给出了等等。

    修改

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