我正在接触 OOP,但遇到了以下困境。我有一个类:
class Recipe {
var $title;
var $time;
var $ingredients = array();
var $instructions;
var $category;
function __construct($title, $time, $ingredients, $instructions, $category) {
$this->title = $title;
...
}
function getTitle() {
return $this->title;
}
}
所有属性都是公共(public)的(默认情况下)。我是否必须为所有这些属性定义访问器方法(例如 getTitle),或者我是否可以直接引用这些属性,如下所示:
...
$recipe = new Recipe($title, $time, $ingredients, $instructions, $category);
echo $recipe->title; // versus $recipe->getTitle();
看起来我将节省很多时间,而不必定义访问器方法。但是我想知道这种方法的优缺点是什么?
最佳答案
OOP 的黄金法则是始终将您的属性设为私有(private)!在极少数情况下允许使用公共(public)属性,但即便如此,也可能有替代解决方案。
原因是:如果您公开您的属性,任何人都可以将它们更改为他们想要的任何内容。大多数属性不能只是任何值。你的 $title 属性应该是一个整数吗?我非常怀疑。那么,如果您或其他人不小心将其设置为整数怎么办?你不会发现它。它将设置该值并且您的程序将继续运行直到失败,因为某处需要一个字符串。此外,您的属性在设置之前应该以某种方式进行验证。您可以在属性的 setter 中包含所有这些验证。
即使您不需要验证某个属性,您仍然最好将它们放在 getter 和 setter 后面,以防最终您确实需要验证它。
将您的属性设为私有(private)可确保您的对象不会在不应发生的情况下发生困惑,从而避免由此产生的任何错误。 :)
有时您会想“好吧,只有我会编辑我的代码,所以什么都不会发生”。但是,您现在应该练习这样做。养成这样做的习惯。您以后会避免任何麻烦。
关于php - 每个公共(public)属性都必须有访问器方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3460658/