PHP类,被认为是不好的做法?二传手和传接球手


PHP Class, considered bad practice? setters and getters

快速问题:在构造函数中设置这样的东西被认为是不好的做法吗:

Class whatever {
    $var = "";
    public function __construct($var){
        $this->var = $var;
    }
    //And then return it in another function like
    public function getVar(){
        return $this->var;
    }
}

是的,这是一种糟糕的做法,因为您没有声明$var,也没有使用setter方法。当您不声明变量,也不声明它为私有或受保护时,getter和setter方法的意义就完全消失了。那么你可以选择$class->var=something

Class whatever {
 private $var;
 public function __construct($var){
   $this->setVar($var);
 }
 public function setVar($var){
   $this->var = $var;
 }
 public function getVar(){
   return $this->var;
 }
}

不,这是一个很好的做法。

假设您有20个字段,必须填写它们才能正确使用类。

好的做法是在构建中初始化它们。如果使用setter,则必须调用20个方法。

你有很好的答案,但我会简要介绍的更多信息

构造函数的作用是什么

如果类实例需要初始化,请在类中使用构造函数

  • 构造函数中设置的变量的getter可以用来了解实例是如何初始化的

setters

当您需要修改实例的行为时,或者当您想将数据加载到中时,您需要这些

吸气器

检索实例内容的唯一方法(由于多种原因,不鼓励使用公共属性)

我的例子

随意做你想做的事,这只是一个例子,显然什么都没做。如果你想问这个问题,请做

<?php
class AnExampleClass {
  // this is convenient sometimes but I don't recommend it
  public $public = '';
  protected $protected;
  private $private;
  public function __construct($private, $protected){
    $this->private = $private;
    $this->setProtected($protected);
  }
  public function getPrivate(){
    return $this->private;
  }
  public function getProtected() {
    return $this->protected;
  }
  public function setProtected($protected) {
    // only allow boolean
    $this->protected = (bool)$protected;
  }
  public function __get($name) {
    // read the manual on this magic
  }
  public function __set($name, $value) {
    // read the manual on this magic
  }
}