How can dependency injection be implemented in PHP classes to pass variables between them?

Dependency injection can be implemented in PHP classes by passing the required dependencies as parameters in the constructor or through setter methods. This allows for better decoupling of classes and makes it easier to test and reuse code.

class Database {
    private $connection;

    public function __construct($connection) {
        $this->connection = $connection;
    }

    public function query($sql) {
        // Use $this->connection to execute the query
    }
}

class UserRepository {
    private $database;

    public function __construct(Database $database) {
        $this->database = $database;
    }

    public function getUserById($id) {
        $sql = "SELECT * FROM users WHERE id = $id";
        return $this->database->query($sql);
    }
}

$connection = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
$database = new Database($connection);
$userRepository = new UserRepository($database);

$user = $userRepository->getUserById(1);