我正在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 )
返回解析错误
谁能告诉我如何创建这个对象?
答案 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检查它。
希望这有帮助, 托马斯