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)
?
我知道私有意味着你不能直接在课外访问它们,但对我来说,如果变量可以从任何地方访问,那么它似乎并不重要......
那么私有变量还有其他隐藏的优势吗?
如果您想将私有变量与公共 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)