PHP中的依赖倒置原理

PHP中的依赖倒置原理,php,oop,solid-principles,dependency-inversion,Php,Oop,Solid Principles,Dependency Inversion,既然PHP是一种松散类型的语言,那么如何在PHP中应用DIP原则呢 非常感谢一个实用的例子。PHP5引入了“类型暗示”,它使函数和方法能够声明“类型化”参数(对象)。在大多数情况下,将示例(例如,从Java移植到PHP5)移植不是一项大任务 一个非常简单的例子: interface MyClient { public function doSomething(); public function doSomethingElse(); } class MyHighLevelObject

既然PHP是一种松散类型的语言,那么如何在PHP中应用DIP原则呢

非常感谢一个实用的例子。

PHP5引入了“类型暗示”,它使函数和方法能够声明“类型化”参数(对象)。在大多数情况下,将示例(例如,从Java移植到PHP5)移植不是一项大任务

一个非常简单的例子:

interface MyClient
{
  public function doSomething();
  public function doSomethingElse();
}

class MyHighLevelObject
{
  private $client;

  public __construct(MyClient $client)
  {
    $this->client = $client;
  }

  public function getStuffDone()
  {
    if ( any_self_state_check_or_whatever )
      $client->doSomething();
    else
      $client->doSomethingElse();
  }

  // ...
}

class MyDIP implements MyClient
{
  public function doSomething()
  {
    // ...
  }

  public function doSomethingElse()
  {
    // ...
  }
}

DIP是一个指导原则:

A.高级模块不应依赖于低级模块。两者都应该依赖于抽象

抽象不应依赖于细节。细节应该取决于抽象

不管“模块”实际上是类、函数、模块(php本身不存在的)、特性还是其他任何东西,它都是相关的


因此,您可以在PHP中使用DIP。事实上,您可以在PHP中使用它,而无需编写类!您可以像管理DIP下的类一样管理函数之间的依赖关系。

实际上,这个答案既不完整也不完整,也不回答主要问题。DIP与语言的强输入无关。这是一个更好的解释:我认为这很好。MyHighLevelObject完全不知道MyDIP(具体化),只知道MyClient(抽象)。