Laravel的工厂?

时间:2017-01-14 18:17:55

标签: php laravel laravel-5.3

看来你可以在Laravel写作工厂。

根据doumentation: https://laravel.com/docs/5.3/database-testing#writing-factories

它似乎与模型/数据库相关的工厂。

是否可以为非模型相关的工厂编写?

例如两个类:

class Car {
  public function drive() { }
} 

Class Bike {
 public function ride() { }
}

我不想使用(new Car)->drive()而是使用Transport工厂来对班级进行分类。

2 个答案:

答案 0 :(得分:0)

我做这样的事情

class Transport
{
    public static function build($vehicle)
    {
        return new $vehicle;
    }
}

interface Vehicle
{
    public function drive();
}

class Car implements Vehicle
{
    public function drive()
    {
        // the way a car drives
    }
}

class Bike implements Vehicle
{
    public function drive()
    {
        // the way a bike drives
    }
}

class Something
{
    public function someFunc()
    {
        Transport::build('Car')->drive();
    }
}

此处没有针对drive()ride()类的CarBike等单独方法,我只添加了drive()方法。然后BikeCar绑定到Vehicle合同。

那么我们只需要将CarBike传递给Transport::build('Car')->drive();

答案 1 :(得分:0)

我们可以按照以下步骤创建Transport::build('car')->drive();之类的Factory模式。

//Create a class for the dynamic object
class Transport{
    public static function build($vehicle)
    {
        return new $vehicle;
    }
}

//Normal class
class Car {
  public function drive() {

  }
}

//call factory class for dynamic object
Transport::build('Car')->drive();