Laravel4:如何访问绑定的静态函数

时间:2013-09-10 16:46:28

标签: php laravel

如何访问绑定的静态函数?它甚至可能吗?

到目前为止有效的是:

在serviceProvider boot()方法中:

$this->app->bind('MyInterface', function(){

                return new MyImplementation();
            });

或通过laravel中的反射事物(同样的方式):

$this->app->bind('MyInterface', 'MyImplementation');

然后在我的业务逻辑中:

$interfaceObject = app::make('MyInterface');
$interfaceObject->create();

什么不行:

如果create()函数在绑定的实现类中是静态的,那么我就不能这样做:

MyInterface的::创建();

我该怎么做?外观不应该是解决方案,因为外观将“假” - 静态方法映射到真实对象,对吗?

1 个答案:

答案 0 :(得分:0)

理解静态是你真正需要的。当你开始深入研究OOP时,静态函数真的不好。在Laravel 3中,可以在大多数类上使用静态,因为静态外观主要通过__callStatic魔术方法以及一些设计良好的实现(如Eloquent)提供。使用静力学在模型上建立帮助也是有意义的,尽管甚至Taylor Otwell在文档中描述了关注点分离是一种更好的策略,创建存储库,服务和实体而不是通用的“模型”。

当你开始研究继承,特别是依赖注入时,静态很难处理,因为它们紧密地结合使用你的具体类的代码。如果你考虑一下,由于这个原因,一个具体的实现并不真正希望绑定到它的静态方法。一个可能的解决方法是为使用静态的具体实现创建一个新的外观,但仍然不是很好的OOP实践,尽管它确实为您提供了一个更宽松的模式。它仍然感觉它在我眼中是非常反模式的。

也就是说,您可以在界面中构建静态。

interface AnInterface {

    public static function takeArgAndReturnSomething($arg);

}

显然,实现此接口的具体类需要这样的静态,因此Laravel应该能够通过控制绑定的反转来管理静态调用。

总而言之,在这些情况下,我会尽量避免使用静力学。