php - 在 PHP 中使用工厂模式创建对象

标签 php design-patterns factory

我是 PHP 编程新手,正在尝试编写基本的工厂模式。我正在尝试使用方法并使用构造函数创建一个类实例。

$ abstract class Car {
   public $type;
   public function getType(){
   echo $this->type;
   }
  }

 //Class that holds all the details on how to make a Honda.
 class Honda extends Car{
      public  $type = "Honda";
   }

 class CarFactory {
    const HONDA = "Honda";
    public  function __construct($carType){
    switch($carType){
        case self::HONDA:
            return new Honda();
            break;
    }
    die("Car isn't recognized.");
    }

 }

 $Honda = new CarFactory(carFactory::HONDA);
 var_dump($Honda);

结果是 CarFactory 类的对象。为什么它不创建 Honda 类型的对象,因为返回类型是 Honda 类型的对象?是因为我使用了构造函数吗?

但是,如果我在 CarFactory 中使用如下方法,它会创建本田类型的对象

    class CarFactory {
    const HONDA = "Honda";
      public static function createCar($carType){
        switch($carType){
            case self::HONDA:
             return new Honda();
            break;
    }
    die("Car isn't recognized.");
  }
    $carFactory = new CarFactory();
    //Create a Car
    $Honda = $carFactory->createCar(CarFactory::HONDA);
    var_dump($Honda); 

}

提前致谢。 SV

最佳答案

 abstract class Car {
   public static function createCar(){
        try
        { 
          // PHP 5.3+ support
          return new static;
        } 
        catch (Exception $e)
        {
           // in case child does not exists
        }
   }
} 

class Honda extends Car { 

}

$honda = Honda::createCar();
var_dump($honda);

关于php - 在 PHP 中使用工厂模式创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12364135/

相关文章:

java - 选择设计模式时的困境

delphi - Spring4d - 具有服务名称的自动工厂

java - Java中自动加载特定父类(super class)的子类的工厂类?

php - 登录页面上的 Laravel 背景图片

php - 如何在php调用mysql过程中创建动态表

php - 比较两个相同的字符串在 PHP 中返回 false

php - socket.io 中的 app.post ('/posts' 带有 https

java - 删除多个 if-else 的最佳方法

design-patterns - 为什么在 SOA 设计中 CRUD 操作如此糟糕?

c# - 串行数据的二进制通信协议(protocol)解析器设计