Getter 和 Setter?[已关闭]

2022-08-30 06:16:08

我不是PHP开发人员,所以我想知道PHP使用显式getter/setters的优点和缺点是什么,以纯OOP风格,带有私有字段(我喜欢的方式):

class MyClass {
    private $firstField;
    private $secondField;

    public function getFirstField() {
        return $this->firstField;
    }
    public function setFirstField($x) {
        $this->firstField = $x;
    }
    public function getSecondField() {
        return $this->secondField;
    }
    public function setSecondField($x) {
        $this->secondField = $x;
    }
}

或只是公共字段:

class MyClass {
    public $firstField;
    public $secondField;
}

答案 1

您可以使用php魔术方法和.__get__set

<?php
class MyClass {
  private $firstField;
  private $secondField;

  public function __get($property) {
    if (property_exists($this, $property)) {
      return $this->$property;
    }
  }

  public function __set($property, $value) {
    if (property_exists($this, $property)) {
      $this->$property = $value;
    }

    return $this;
  }
}
?>

答案 2

为什么使用 getter 和 setters?

  1. 可伸缩性:重构 getter 比在项目代码中搜索所有 var 赋值更容易。
  2. 调试:可以在 setter 和 getter 处放置断点。
  3. 更干净:魔术函数不是写得更少的好解决方案,你的IDE不会建议代码。更好地使用模板来快速编写获取器。

direct assignment and getters/setters


推荐