Класс 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();