2011-10-21 121 views
0

我在php中實現了Factory Pattern。有一個AbstractFactory類,一個是ConcreteFactory類。以下是我正在使用的代碼:如何在PHP中創建派生類對象作爲基類對象

/** AbstractFactory.php */ 
abstract class AbstractFactory{ 
     abstract function xyz(); 
} 


/** ConcreteFactory.php */ 
require_once "AbstractFactory.php" 
require_once "ABC.php" 
class ConcreteFactory extends AbstractFactory{ 
    public function xyz(
      return new ABC(); 
    ); 
} 


/** Client.php */ 

require_once "ConcreteFactory .php" 
class Client extends ConcreteFactory { 
    public function dothis() { 

     // Now i want to create AbstractFactory type object from ConcreateClass 

     AbstractFactory $afobject = new ConcreteFactory(); 
    } 
} 

(AbstractFactory $afobject)返回一個分析錯誤。
任何人都可以請告訴我如何創建這個對象?

回答

1

創建這樣的:

$afobject = new ConcreteFactory(); 

有沒有真正的類型在PHP中,所以不需要下鑄造。只需使用該對象就好像它是抽象工廠一樣。通常你在文檔中指出這一點。假設您想將該對象傳遞給只接受抽象工廠的方法,那麼只需在文檔的@param屬性中指明它即可。我不建議使用Type-Hints來達到這個目的,因爲如果你嘗試將其放入具體的類中,它會發出通知。如果你想確保你有一個抽象工廠,在你的方法的第一行中用instanceof檢查它。

希望這有助於 托馬斯

2

PHP不是Java。你不能聲明實例如下:

AbstractFactory $afobject = new ConcreteFactory(); 

你只是做

$afobject = new ConcreteFactory(); 

,這將讓你在$ afobject一個ConcreteFactory實例。

有其他語法錯誤,以及:

public function xyz(
     return new ABC(); 
); 

應該讀

public function xyz() { 
     return new ABC(); 
} 

,你是後

require_once "ConcreteFactory .php" 

嘗試缺少分號與做一個IDE的代碼語法突出顯示或使用php -l filename從命令行運行您的代碼以提升它。

+0

我沒有寫在這裏整個語法.... SP請ingnore語法錯誤..我主要關心的是類對象:) :) –

相關問題