如何访问绑定的静态函数?它甚至可能吗?
到目前为止有效的是:
在serviceProvider boot()方法中:
$this->app->bind('MyInterface', function(){
return new MyImplementation();
});
或通过laravel中的反射事物(同样的方式):
$this->app->bind('MyInterface', 'MyImplementation');
然后在我的业务逻辑中:
$interfaceObject = app::make('MyInterface');
$interfaceObject->create();
什么不行:
如果create()函数在绑定的实现类中是静态的,那么我就不能这样做:
MyInterface的::创建();
我该怎么做?外观不应该是解决方案,因为外观将“假” - 静态方法映射到真实对象,对吗?
答案 0 :(得分:0)
理解静态是你真正需要的。当你开始深入研究OOP时,静态函数真的不好。在Laravel 3中,可以在大多数类上使用静态,因为静态外观主要通过__callStatic
魔术方法以及一些设计良好的实现(如Eloquent
)提供。使用静力学在模型上建立帮助也是有意义的,尽管甚至Taylor Otwell在文档中描述了关注点分离是一种更好的策略,创建存储库,服务和实体而不是通用的“模型”。
当你开始研究继承,特别是依赖注入时,静态很难处理,因为它们紧密地结合使用你的具体类的代码。如果你考虑一下,由于这个原因,一个具体的实现并不真正希望绑定到它的静态方法。一个可能的解决方法是为使用静态的具体实现创建一个新的外观,但仍然不是很好的OOP实践,尽管它确实为您提供了一个更宽松的模式。它仍然感觉它在我眼中是非常反模式的。
也就是说,您可以在界面中构建静态。
interface AnInterface {
public static function takeArgAndReturnSomething($arg);
}
显然,实现此接口的具体类需要这样的静态,因此Laravel应该能够通过控制绑定的反转来管理静态调用。
总而言之,在这些情况下,我会尽量避免使用静力学。