Что такое инъекция зависимостей в PHP | Dependency injection

Класс User - жёстко завязан на класс Db. И если мы каким-то образом будем модифицировать класс Db то это может негативно сказаться на классе User, особенно если наш класс User жёстко зависит от нескольких классов.
Чтобы от этого избавиться нужно использовать иъекцию зависимостей. Суть в том что некую зависимость мы рождаем не в самом классе а инъектируем в конструктор при создании класса (извне).

user.php

class User{
	public function getAllUser(){
		$db =  new Db;
		return $db->query('SELECT * FROM `users`');
	}
}

 db.php

class Db{
	public function query($query){
		return query;
	}
}

index.php

include('db.php');
include('user.php');

$user = new User();
echo $user->getAllUser();

Изменим код чтобы создать инъекцию зависимостей.

user.php

class User{
	protected $db;
	public function getAllUser(Db $db){
		$this->db = $db;
	}
	public function getAllUser(){
		return $this->db->query('SELECT * FROM `users`');
	}
}

index.php

include('db.php');
include('user.php');

$db = new Db();
$user = new User($db);
echo $user->getAllUser();