jas*_*son 2 oop access-modifiers
我试图了解将类变量设为私有而非公共的好处.我明白了getter/setter方法访问/修改私有/受保护的数据,但它的唯一目的就是"让我从我的压延数据"?示例:我不怎么说
$person->age = x;//bad?
Run Code Online (Sandbox Code Playgroud)
具有不同的破坏潜力
$person->set_x(x);//reccommended in OOP articles
Run Code Online (Sandbox Code Playgroud)
kev*_*ner 13
这都是关于封装的.
说你用$person->age = x.现在,它会工作正常,让我们说你在100个地方都有这条线.后来事实证明,你想要限制age大于0的数字.通过直接访问成员变量,没有办法轻易地强制执行该限制.
但是,假设你最初是$person->set_age(x)在这100个地方写的.现在,您可以更改您的二传手
private $_age;
public void age($new_age) {
$this->_age = $new_age;
}
Run Code Online (Sandbox Code Playgroud)
至
private $_age;
public void age($new_age) {
if ($new_age > 0) {
$this->_age = $new_age;
}
}
Run Code Online (Sandbox Code Playgroud)
您不必触及set_age方法的单个使用者; 变化"只是工作".这就是OOP的真正美:你可以在单个方法调用后隐藏很多实现细节.
封装也可以在其他地方提供帮助:假设你想要一个记录每个年龄变化的Person的子类.使用setter方法,它就像覆盖一样简单; 直接变量访问,这将是一个烂摊子.