0

我在 php 中实现工厂模式。有一个 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 )返回解析错误。
谁能告诉我如何创建这个对象?

4

2 回答 2

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。

于 2011-10-21T09:31:52.297 回答
1

你像这样创建它:

$afobject = new ConcreteFactory();

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

希望这会有所帮助,托马斯

于 2011-10-21T09:36:03.033 回答