这里是一个基本的类结构,使用DI之前(我知道,它有点不正确的结构,请你只把注意力放在这个问题)PHP,依赖注入 - 杀死静态方法,但instatize是不必要
class Mobile
{
public function getWeight()
{
return 4;
}
}
class User
{
public static function getWeight()
{
$mobile = new Mobile();
return $mobile->getWeight();
}
}
一个更新,使用DI后:
class User
{
public $mobile;
public function getWeight()
{
return $this->mobile->getWeight();
}
}
如果我们检查,使用getWeight()
没有需求有User
一个实例,因为它是静态的 - 它没有意义的创建它的一个实例。 但是现在,getWeight()
不能是静态的,所以无论如何需要一个实例 - 只是因为依赖注入!当然,我知道这个例子有点跛脚 - 我只想指出依赖注入杀死静态方法的逻辑,但有时候需要静态方法,因为它没有意义拥有一个类的实例,只是想到了JAVA Math.max()
方法。 如何解决它?
多数民众赞成好,但我仍然没有看到为什么要做一个方法非静态只是因为依赖注入 –
你不这样做。重点是:如果你进行依赖注入,你不必使用静态方法(你仍然可以,但很快就会遇到这种情况)。根本没有必要了,因为DI给你你需要的所有物体。您将对象创建与对象使用分开。从某种意义上来说,静态方法调用也是。你隐式创建并访问那个“上帝”类的“对象”,这个单一的实例托管静态方法。 – Sven
@Sven - 听起来像是单身模式?例如,假设我们需要静态方法中的依赖项('MyClass :: new(params)' - 将项目保存到数据库),将数据库连接/链接传递给静态方法的最佳方式是什么,if它不能通过构造函数的参数实例化? – 1234567