我在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 )
返回解析错误。
有人能告诉我如何创建这个对象吗?
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
运行代码以检查它
您可以这样创建:
$afobject = new ConcreteFactory();
在PHP中没有真正的类型,所以不需要向下转换。就像使用抽象工厂一样使用对象。通常您会在文档中指出这一点。因此,假设您希望将该对象传递给一个只接受抽象工厂的方法,那么只需在文档的@param属性中指出它。我不建议将Type-Hints用于此目的,因为如果您试图放入具体类,它将引发一个通知。如果你想确保你得到了一个抽象工厂,在你的方法的第一行用instanceof检查它。
希望这有帮助,托马斯。