2010-07-15 53 views
2

我在我的應用程序中有一個抽象基類。如何在不定義類名的情況下正確繼承`factory`方法?

我想提供一個factory()方法來讓我用一種靜態方法輕鬆地創建一個新模型。

public static function factory() { 
    $class = __CLASS__;  
    return new $class; 
} 

這顯然不起作用,因爲它試圖啓動抽象類。

我想知道的是,如何讓繼承此方法的類自己啓動而不是基類?

我必須將模型的名稱傳遞給工廠方法嗎?

PHP版本是5.2.13但我也有興趣知道我會在> = PHP 5.3中使用。

+0

是PHP 5.3還是以前版本的問題? – kiamlaluno 2010-07-15 03:30:26

回答

1

我是否必須將模型的名稱傳遞給工廠方法? - 5.3之前是的。

這是一個反模式;通常您只需將方法定義爲抽象,然後在每個類上實現。

我可以解釋的最簡單的方法就是說靜態方法定義的通用功能不是實例或上下文感知的,所以通過依賴上下文/實例數據你做了一些錯誤的事情 - 考慮它與在一個靜態方法內寫入if($this->property)

1

在PHP5.3,你有「延遲靜態綁定」,有了它,功能get_called_class():

$class = get_called_class(); 
return new $class; 

編輯:考慮到這是PHP5.2,有沒有簡單的方法做它不會侵入調試回溯或使用反射。問題在於「自我」沒有降級。

相關問題