Php 我应该使用公共setter在类内设置私有属性值吗?
假设我有一个类测试,它有一个名为Php 我应该使用公共setter在类内设置私有属性值吗?,php,oop,class,coding-style,refactoring,Php,Oop,Class,Coding Style,Refactoring,假设我有一个类测试,它有一个名为$\u list的私有属性和一个公共setter。 公共setter用于从外部设置属性值 class Test { private $_list; public function getList() { return $this->_list; } public function setList($list) { $this->_list = $list; } pub
$\u list
的私有属性和一个公共setter。公共setter用于从外部设置属性值
class Test {
private $_list;
public function getList() {
return $this->_list;
}
public function setList($list) {
$this->_list = $list;
}
public function initialize() {
$list = array();
/* ... Some code that fills the $list with values etc. ... */
// 1) Set value directly
$this->_list = $list;
// 2) Use public setter
$this->setList($list);
}
}
问题是-是否需要使用公共setter在类内设置私有属性值?哪种方式更好?#1或#2?为什么呢?
你喜欢哪种方式? 我想看到一个完整的答案,解释每种方法的优缺点
谢谢。如上所述,两者都可以接受,但正确的答案是:宁可使用直接属性访问,但有时最好使用setter 第一,(财产访问)优点:
- 易读且速度稍快
- 为您提供了一种方法,即这是对象的一个简单属性
- 您可以在设置属性时执行自定义操作(例如初始化其他属性、缓存或调用参数对象上的方法)
- 您将属性视为类的子元素,该类可能实现了自己的逻辑
关于getter和属性访问,您也可以问同样的问题,上面也适用。两者都可以。函数调用有/非常/轻微的开销,但不足以产生影响。除此之外,在这种情况下,它们基本上是相同的。使用该函数的一个好处是,如果在设置变量时使用了额外的逻辑,那么在这种情况下,它将保持事情的一致性,而无需复制代码?O_O@AlexLunix可能有各种原因,不是因为给出的示例,但是如果(根据我的评论)有进一步的逻辑,比如验证值,那么你不希望人们直接设置对象属性的任何值,你希望他们进行验证。@AlexLunix理想情况下会做更多的工作来验证输入,或者对象的内部结构比一组简单的变量更复杂。@Alex Lunix Setter曾经可以变成比
$this->\u list=$list
更复杂的东西。通过setter允许公众访问私有财产,允许处理一些预处理功能、间接赋值、允许在赋值前检查值等。感谢您的回答,GaborSch。让我们等一会儿,看看是否还有更多的人想分享他们的观点。如果没有比你更好的答案,我会接受你的。谢谢!事实上,这适用于所有面向对象的语言,而不仅仅是PHP。