我有一個抽象類,需要由子類指定值的方法。說:強制孩子類來初始化受保護的屬性
<?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