如果您想将私有变量与公共getter和setter一起使用,或者您只是想将变量直接声明为public,则会因情况而异.
使用“getter”和“setter”可能是好的原因是,如果你想控制某人访问数据的时间.
举个例子,假设你得到了这个:
public setBirthday($date)
然后,您可以确保传递给该setter的日期是有效的生日.
但是,如果您只是将变量声明为公共,则不能
public $birthday;
根据评论.
Also, if you decide change the
internal storage mechanism from a
string containing the date to the
number of seconds since 1/1/1970, you
can still present the date externally
in the same way if you use
encapsulation, but not if you expose
the variables directly. Every piece of
code that touched the internal
variable directly would now be broken.
这意味着如果内部存储机制从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
}