我有一个抽象类,需要由子类指定值的方法。说:强制孩子类来初始化受保护的属性
<?php
abstract class Foo {
protected $value;
/* ..... other required properties here */
public function setValue($value) {
$this->value=$value;
}
public function getProcessedValue() {
// some processing here using $this->value;
return $processed_value;
}
/* ..... other public methods here using protected properties as inputs */
} end of class Foo
class ChildFoo extends Foo {
/* addtional code here */
} // end of class ChildFoo
// in main code
$child_foo=new ChildFoo();
$child_foo->setValue($value); /* how do you force this????? */
echo $child_foo->getProcessedValue();
?>
如何强制子类在使用前初始化受保护的属性?
$child_foo->setValue($value);
这里有一些事情我已经考虑过这样做的:
1)制作的setValue一个抽象的方法 - 这可能会迫使开发者实现在子类的setValue,但他们可能不正确(DUH使用它)
!2)建议在SO中建立一个包含构造函数中所需参数的文章 - 这可能有效,但由于已经有setValue(),所以似乎是多余的。我打算保留setValue(),以便同一个对象可以重用于不同的输入。
这个问题有什么模式可能是大多数程序常见的吗?
谢谢!听起来很明显,现在你解释它的方式。一个简单的比喻就是过分分析。 – alds
对不起延迟赏金。我一直在思考这个问题,并一直在看别人的代码。你所建议的是一个很好的指导方针/模式,用精心设计的例子来说明。现在,当我创建我的课程时,我总是制定哪些参数是必需的,哪些是可选的。我按照你的建议做了,并将所需的参数放在构造函数中。 Setter函数现在提供了一种方法来包含修改默认状态/行为(由所需参数提供的默认状态)的可选参数。非常感谢您帮助我进一步提高OOP技能! – alds