Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 以雄辩的关系将接口绑定到实现_Php_Laravel_Eloquent_Module_Interface - Fatal编程技术网

Php 以雄辩的关系将接口绑定到实现

Php 以雄辩的关系将接口绑定到实现,php,laravel,eloquent,module,interface,Php,Laravel,Eloquent,Module,Interface,根据“”可以将接口与其实现绑定,如下所示: $this->app->bind( 'App\SharedContext\Userable', 'App\Modules\Core\User' ); 因此,当我调用下一行时,我将得到一个用户对象:我相信你可以通过一个静态函数调用实现你想要的,它放在你的应用程序的某个地方 public static getClass () { return get_class(resolve(Userable::class)); }

根据“”可以将接口与其实现绑定,如下所示:

$this->app->bind(
    'App\SharedContext\Userable',
    'App\Modules\Core\User'
);

因此,当我调用下一行时,我将得到一个
用户
对象:我相信你可以通过一个静态函数调用实现你想要的,它放在你的应用程序的某个地方

public static getClass () {
    return get_class(resolve(Userable::class));
}

这将解决您的问题,因为您现在可以绑定类并在运行时解决它。

您不能使用
new
实例化接口的具体类,您必须通过容器进行实例化。目前,您可能需要提交一个想法来改变这一点,但(理论上)您可以创建自己的基本模型类,覆盖
newRelatedInstance
函数,并让所有模型扩展自己覆盖的模型。但是在关系上下文中,您需要告诉ORM哪一个类在另一端,因为接口不是类,所以我不明白您想做什么。因为你需要告诉一个具体的类和接口不是具体的。@mrhn我试图实现的是使用接口将属于不同模块但有一定关系的两个模型解耦。(这在其他框架中非常常见)。例如,在symfony中,您可以使用
ResolveTargetEntityListener
。使用抽象而不是具体类进行开发实际上是减少耦合必不可少的,因此我认为应该将其外推到有说服力的关系中。@apokryfos我回家后会看看你的链接。谢谢,我觉得你正在尝试在一个框架中做另一个设计,而这个框架不希望你走这条路。但是静态调用调用您的绑定并从该工作中获取类,不会吗?公共静态getClass(){return get_class(resove(Userable::class));}非常感谢,您的评论是实现该解决方案的灵感来源