如何在PHP中创建派生类对象作为基类对象

时间:2011-10-21 09:29:31

标签: php abstract-factory

我正在php中实现Factory Pattern。有一个AbstractFactory类,一个是ConcreteFactory类。以下是我正在使用的代码:

/** 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 )返回解析错误 谁能告诉我如何创建这个对象?

2 个答案:

答案 0 :(得分: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运行代码来lint。

答案 1 :(得分:1)

你这样创建:

$afobject = new ConcreteFactory();

PHP中没有真正的类型,因此不需要向下转换。只需使用该对象就好像它是抽象工厂一样。通常你在文档中指出。因此,假设您希望将该对象传递给只接受抽象工厂的方法,然后在文档的@param属性中指明它。我不建议为此目的使用Type-Hints,因为如果您尝试输入具体类,它会引发通知。如果你想确保你有一个抽象工厂,请在方法的第一行用instanceof检查它。

希望这有帮助, 托马斯