我在php中有一个类,想知道是否有一个特定的约定如何在我的构造函数中设置这些私有变量。
我应该使用setter
还是this
设置它们?
class foo {
private $bar;
public function __construct($foobar) {
$this->bar = $foobar;
}
public function setBar($bar) {
$this->bar = $bar;
}
public function getBar() {
return $this->bar;
}
}
或
class foo {
private $bar;
public function __construct($foobar) {
$this->setBar($foobar);
}
public function setBar($bar) {
$this->bar = $bar;
}
public function getBar() {
return $this->bar;
}
}
或者我的问题是哲学吗?
getters
可以询问同样的问题。但我想在处理父类的私有变量时必须使用setters
和getters
。
答案 0 :(得分:2)
由于数据验证和将来的维护,您应该在构造函数中使用setBar
。
// a developer introduces a bug because the string has padding.
$foo->setBar("chickens ");
// the developer fixes the bug by updating the setBar setter
public function setBar($bar) {
$this->bar = trim($bar);
}
// the developer doesn't see this far away code
$f = new foo("chickens ");
开发人员将代码发送给生产部门认为他修复了错误。
答案 1 :(得分:1)
在这样一个微不足道的例子中,是的,你的问题主要是哲学的! :) 但是,如果你的setter会执行一些特殊操作(例如检查输入的有效性或修改它),那么我建议使用第二种方案。
答案 2 :(得分:1)
此:
class foo {
private $bar;
public function __construct($foobar) {
$this->bar = $foobar;
}
public function setBar($bar) {
$this->bar = $bar;
}
public function getBar() {
return $this->bar;
}
}
与此无异:
class foo {
public function __construct($bar){
$this->bar = $bar;
}
public $bar;
使用getter和setter的一个原因是,如果您只允许在对象构造上设置变量,如下所示:
class foo {
private $bar;
public function __construct($foobar) {
$this->bar = $foobar;
}
public function getBar() {
return $this->bar;
}
}
除非必要,否则不要过度使用吸气剂和制定者