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


How to create a derived class object as base class object in PHP

我在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检查它。

希望这有帮助,托马斯。