What are the best practices for structuring PHP classes to avoid God-Objects and promote reusability?
To avoid God-Objects and promote reusability in PHP classes, it's important to follow the principles of SOLID design. This includes breaking down classes into smaller, more focused components, adhering to the single responsibility principle, and using interfaces to define contracts between classes. By structuring classes in a modular and cohesive manner, you can reduce dependencies, improve maintainability, and increase code reusability.
// Example of breaking down a God-Object into smaller, more focused components
interface Logger {
public function log($message);
}
class FileLogger implements Logger {
public function log($message) {
// Log message to a file
}
}
class EmailLogger implements Logger {
public function log($message) {
// Send message via email
}
}
class UserManager {
private $logger;
public function __construct(Logger $logger) {
$this->logger = $logger;
}
public function createUser($username) {
// Create user logic
$this->logger->log("User created: " . $username);
}
}
$fileLogger = new FileLogger();
$userManager = new UserManager($fileLogger);
$userManager->createUser("john_doe");