我应该在类中使用setter来设置属性吗?

时间:2010-02-23 23:13:09

标签: php

我想在我的班级中设置一个属性值。我可以在没有制定者和吸气剂的情况下做到这一点,但我想知道解决这个问题的“正确”方法。这是一个登录脚本,因此属性和setter都是私有的。

我应该直接设置属性还是使用setter和getter?

4 个答案:

答案 0 :(得分:1)

这可能主要取决于个人偏好......

如果你必须从类的方法设置私有属性,我会说你可以直接访问该属性。

在这种情况下使用setter / getter的一个原因是,如果你想确保每次设置属性时都对数据进行某些条件或计算。


作为旁注:当然,如果你想从课外访问你的私有财产,你将不得不使用公共的setter / getter - 但它似乎不是你想要在这里做的。< / p>

答案 1 :(得分:0)

这是一个意见问题。传统的面向对象编程原则说,但这完全取决于你。

请注意,如果将属性设置为private,则必须使用setter方法。 Setter应该始终是公共的,以便其他类和方法可以在属性上运行。如果您没有任何理由从课堂外访问该物业,那么不要创建一个setter,因为它确实无关紧要;你总是可以从类中访问私有成员变量/属性。

答案 2 :(得分:0)

不要忘记您可以使用“magic”__get / __set方法,而无需为所有内容创建getter和setter。

magic functions

编辑:如果成员变量是私有或受保护的,则必须使用getter和setter。如果它们是公开的,那就是风格问题 - 尽管你应该与你班上的其他人保持一致。

答案 3 :(得分:0)

Setter / Getters允许派生类更容易地修改/限制/增强对象的状态和行为。但你可以过度做setter / getters然后他们会变得有点烦人。 (特别是在不隐藏它们的语言中)。

class Foo {
  protected $x;
  public function __construct($x) {
    $this->setX($x);
  }

  public function setX($x) {
    $this->x = $x;
  }

  public function something($y) {
    // not using a getter here, it's only an example
    echo $this->x * $y;
  }
}

class DoubleFoo extends Foo {
  public function setX($x) {
    parent::setX($x*2);
  }
}

$df = new DoubleFoo(1);
$df->something(5);