完全不熟悉OOP编程,如果答案显而易见,那就很抱歉。我见过很多YouTube教程,代码如下:
class myClass{
private $myVar;
function getVar(){
return $this->myVar;
}
}
myObject = new myClass();
print myObject->getVar();
但为什么最好将变量设为私有,然后通过函数访问它,而不是仅使用myObject->myVar
?
答案 0 :(得分:1)
私有变量的一些好处:
您可能还会看到here。
这有用吗?
答案 1 :(得分:0)
在第一种情况下,你有一个getter,而不是一个setter,所以你可以“只读”私有的$ myVar。在第二种情况下,$ myVar是公共的,所以你可以设置并获得myVar。
也许阅读更多关于getter and setter(甚至在stackoverflow上)了解,为什么在OOP设计模式中使用getter和setter更有效:)
答案 2 :(得分:0)
get
和set
功能可能不仅仅是获取和设置。例如,这样的事情怎么样:
class myClass {
private $myVar;
public function setVar($val) {
if( !is_numeric($val)) throw new Exception("Input must be a number");
$this->myVar = 0+$val;
}
}
如果$myVar
是公开的,我可以设置我想要的任何值,而不仅仅是数字,这可能会导致以后出错。这只是一个可能的应用程序,有无数的用途;)
答案 3 :(得分:0)
项目越大,不同对象之间可能发生的交互次数就越多。您希望控制并将这些交互限制在最低限度,否则很难发现副作用,并且会蔓延到您的代码中。
例如,您可以有一个班级来计算给定金额的税金。您不希望任何人意外地将0.05
税额更改为3.00
,并向客户收取商品价格的三倍金额,或将税制变量的类型更改为NULL
和在计算过程中导致异常/致命错误。
使用定居者,您可以强迫人们遵守您的规则。您可以在将值分配给私有变量之前验证所有内容。
通常,一种好的做法是:让一切都变得私密 - 然后公开需要公开的东西 - 并为必要的私人提供必要的掠夺者和定居者。