如何从注入了Interface实例的模型创建新对象?

时间:2018-03-20 14:12:14

标签: php laravel

我试图理解这是如何工作的。我有这个模型:

namespace App;

use L5SimpleFM\FileMakerModels\BaseModel;
use L5SimpleFM\Contracts\FileMakerInterface;


class FMNationality extends BaseModel
{
    protected $connection = 'filemaker';
    protected $layoutName = 'Web : Nationalities';
}

BaseModel __constructor方法如下所示:

namespace L5SimpleFM\FileMakerModels;
use L5SimpleFM\Contracts\FileMakerInterface;  

abstract class BaseModel
    {

        protected $layoutName;
        protected $connection;

        public function __construct(FileMakerInterface $fm)
        {
            $this->connection = $fm->setLayout($this->layoutName);
        }
        ...
    }

FileMakerInterface接口如下所示:

namespace L5SimpleFM\Contracts;

interface FileMakerInterface
{

    public function setLayout($layoutName);

    public function findAll();

    public function findByFields($fieldValues);

    ...
}

现在,我将如何创建新的FMNationality模型?当我在修补程序中尝试$x = new FMNationality();时,它会询问参数,因为BaseModel有一个接口实例作为参数......

我想要的就是能够创建新的类对象,我不知道如何。

1 个答案:

答案 0 :(得分:0)

由于您尚未声明构造函数,因此使$ x = new FMNationality()调用继承的baseModel构造函数。 因此,您必须在调用中传递参数,或者必须在FMNationality类中声明不带参数的构造函数。 这样的事情:))