Поскольку PHP — язык со свободной типизацией, как можно применить принцип DIP в PHP?
Практический пример будет принят с благодарностью.
Поскольку PHP — язык со свободной типизацией, как можно применить принцип DIP в PHP?
Практический пример будет принят с благодарностью.
PHP 5 представил «подсказку типа», которая позволяет функциям и методам объявлять «типизированные» параметры (объекты). В большинстве случаев портировать примеры не должно быть большой задачей, например. с Java на PHP 5.
Очень простой пример:
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 как таковые), черты или что-то еще.
Итак, да, вы можете использовать DIP в PHP. На самом деле вы можете использовать его в PHP даже без написания классов! Вы можете управлять зависимостями между функциями так же, как и для классов в DIP.