爲您介紹OOP的問題:抽象類和驗證方法
情況:我想用一個公共setter和抽象驗證一個抽象類,因爲每個孩子將驗證以獨特的方式該屬性。
代碼:
abstract class Parent {
public function setName($name) {
if (validateName($name)) {
$this->_name = $name;
} else {
// error msg
}
}
abstract public function validateName($name);
}
class Child extends Parent {
public function validateName($name) {
// ensure name gits this child's requirements
}
}
問題:這是一個 「合法」 的設計方式?我想,因爲setName
方法對於每個子類都是相同的,所以它應該是父類中的公共方法,但驗證程序應該是抽象的,以強制子類實現它。
我只是勾畫了這一點,在紙上概念...
人們習慣於弱智化的例子,讓其他人可以快速獲得問題的根源。通常情況下,這是非常好的,但是如果問題是關於最佳面向對象操作的問題,那麼知道確切的上下文是什麼變得至關重要。類旨在表示*東西*;不知道這些東西是什麼,沒有什麼可以設計一個類。 – erisco 2011-02-23 05:51:10
在法律上,法律試圖與公正匹配。在物理學中,法律可以是攻擊孤兒的電鋸兇手。編程中的法律更像物理上的法律。 – erisco 2011-02-23 06:17:02
真的沒有那麼多,但我很欣賞您的反饋。更多的數據是'Parent'類是一個通用的遊戲類,我們想要設置勝利的一面。小孩'GameA'只有兩面,所以有效的贏面將是1,2或0(平局)。 'GameB'支持8名球員,並且可以有平局,個人獲勝者或者2人或3人的獲勝團隊。所以,我想在父級中定義setter,並讓子級決定驗證。這對我來說似乎合乎邏輯,但我只是將我的小拇指蘸入OOP。 – Drew 2011-02-23 06:46:09