2011-10-21 79 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语法错误..我主要关心的是类对象:) :) –

相关问题