How can the principles of Dependency Injection be applied effectively in PHP projects to improve code quality and maintainability?
Issue: Dependency Injection helps improve code quality and maintainability by decoupling dependencies from the classes that use them, making it easier to test, reuse, and maintain code. PHP Code Snippet:
// Define an interface for the dependency
interface LoggerInterface {
public function log($message);
}
// Implement a class that uses the dependency through constructor injection
class User {
private $logger;
public function __construct(LoggerInterface $logger) {
$this->logger = $logger;
}
public function createUser($username) {
// Create user logic
$this->logger->log('User created: ' . $username);
}
}
// Implement a class that implements the LoggerInterface
class FileLogger implements LoggerInterface {
public function log($message) {
// Log message to a file
echo $message . ' logged to file';
}
}
// Create instances of the classes and inject the dependency
$fileLogger = new FileLogger();
$user = new User($fileLogger);
$user->createUser('john_doe');