我正在寫一個PHP應用程序的子類,因爲我想有多種方式來創建一個對象,我正在做不同的工廠方法,而不是多個構造函數。從子類工廠方法PHP調用超類工廠方法
我有一個工廠方法User
User::from_id
User::from_netid
我有User
幾個子類。我以前調用父superconstructor,但是當我切換到構造函數不存在的工廠方法。
我有Student
,User
的子類。爲了得到它的工作,我不得不幾乎所有的User::from_id
我父工廠代碼複製到load_by_id
,因爲在這種情況下,例如已經存在:
// In Student.php - Student extends User
public static function from_id_and_course($id, $course){
$instance = new self();
$instance->load_by_id($id);
$instance->course = $course;
...
}
我想打電話從子類的父類工廠方法一個起點,然後繼續添加其他字段。事情是這樣的......
$instance = User::from_id($id);
或
$instance = Student::from_id($id);
但在這些情況下,它給了我一個User
對象,我需要一個Student
對象。我能做到這一點的唯一方法就是做$instance = new self()
。
如何從子類中調用超類工廠方法作爲創建新子類工廠方法的起點?
僅供參考你在這裏沒有實現真正的工廠模式。你打算讓另一個類充當工廠,以便任何想要使用student/users /任何子類的類都鬆散地耦合到那些通過調用用戶類的特定方法而不緊密耦合的類。 – 2011-12-21 01:18:52
@ZeSimon - 這似乎是[工廠方法](http://en.wikipedia.org/wiki/Factory_method_pattern)模式,而不是完整的工廠模式 – HorusKol 2011-12-21 01:20:46
同意,但我認爲在這種情況下,他會受益於完整工廠模式。 – 2011-12-21 01:22:31