PHP:从另一个对象调用对象方法的最佳方法?

Dew*_*159 3 php oop

我正在寻找从另一个类调用类方法的最佳方法,而不必使用Global来获取类实例,因为我现在理解"全局是邪恶的"!

以下是一些代码来解释它:

class Assets{
 public $assets = array();
 public function add($asset){
  $this->assets[] = $asset;
 }
}
Run Code Online (Sandbox Code Playgroud)

现在我想在这里调用Assets/call方法.

$assets = new Assets;
class Form{
 public function __construct(){
  global $assets;
  $assets->add('Form');
 }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下使用Global是不是很糟糕?如果是这样,其他什么方式被认为是最好的?

PS:我只需要使用该类的一个实例; 意味着我不想在第二个类中创建一个新实例.

Eve*_*ert 7

如果您只想拥有1个资产实例,则需要使用某种形式的依赖注入.

在这种情况下最明显的是将它传递给构造函数:

class Form{
 public function __construct(Assets $assets){
  $assets->add('Form');
 }
}
Run Code Online (Sandbox Code Playgroud)

确实是一个坏主意,使用全局变量.

  • 是的,这是一个很棒的做法.还有一些其他的方法也被认为是"好的",但是`global`,`static`或者monletons在acedemic OOP设计中都被认为是有点不好的.尽可能避免这些. (2认同)