私有变量的优点/缺点?

Ale*_*lex 7 php variables private class public

我习惯于将我的所有类变量设为私有,并创建"包装"函数来获取/设置它们:

class Something{
  private $var;

  function getVar(){
    $return $this->var;
  }

}

$smth = new Something();
echo $smth->getVar();
Run Code Online (Sandbox Code Playgroud)

我看到很多人这样做,所以我最终做了同样的事情:)

以这种方式使用它们是否有任何优势:

class Something{
  public $var;
}
$smth = new Something();
echp $smth->var;
Run Code Online (Sandbox Code Playgroud)

我知道私有意味着你不能直接在课外访问它们,但对我来说,如果变量可以从任何地方访问,那么它似乎并不重要......

那么私有变量还有其他隐藏的优势吗?

Fre*_*rik 3

如果您想将私有变量与公共 getter 和 setter 一起使用,或者您只想直接将变量声明为公共变量,则情况会有所不同。

使用“getter”和“setter”可能很好的原因是,如果您想控制某人何时访问数据。

举个例子,假设你得到了这个:

public setBirthday($date)
Run Code Online (Sandbox Code Playgroud)

然后您可以确保传递给该设置器的日期是有效的生日。

但是如果你只是像这样将变量声明为 public 则不能

public $birthday;
Run Code Online (Sandbox Code Playgroud)

根据评论。

另外,如果您决定将内部存储机制从包含日期的字符串更改为自 1970 年 1 月 1 日以来的秒数,如果您使用封装,您仍然可以以相同的方式在外部呈现日期,但如果您公开直接变量。现在,每一段直接接触内部变量的代码都会被破坏。

这意味着,如果内部存储机制更改为 1970 年 1 月 1 日起的秒数,则您无需更改“外部 API”。原因是因为你可以完全控制它:

public getBirthday() {
  // you can still return a string formatted date, even though your 
  // private variable contains number of seconds from 1/1/1970
}
Run Code Online (Sandbox Code Playgroud)