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


Laravel4: how to access a static function of a binding

如何

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

到目前为止有效的是:

在 serviceProvider boot() 方法中:

$this->app->bind('MyInterface', function(){
                return new MyImplementation();
            });

或通过Laravel中的反射(工作方式相同):

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

然后在我的业务逻辑中:

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

什么不起作用:

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

我的界面::创建();

我该怎么做?立面不应该是解决方案,因为立面将"假"静态方法映射到真实对象,对吧?

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

当您开始研究继承(特别是依赖项注入)时,静态数据更难使用,因为它们紧密耦合使用具体类的代码。如果你考虑一下,一个具体的实现不会真的希望静态方法绑定到它,正是因为这个原因。一种可能的解决方法是为使用静态的具体实现创建一个新的外观,这仍然不是好的 OOP 实践,尽管它确实为您提供了更宽松的模式。在我眼里,这仍然是一种反模式。

也就是说,您可以在接口中构建静态数据。

interface AnInterface {
    public static function takeArgAndReturnSomething($arg);
}

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

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