Singleton ensures only one instance of a class exists throughout the application. A private constructor and static getInstance() method control creation. Useful for database connections but makes testing harder.
Singleton Pattern
class Database {
private static ?Database $instance = null;
private PDO $pdo;
private function __construct() {
$this->pdo = new PDO(
"mysql:host=localhost;dbname=app",
"user", "pass"
);
}
// Prevent cloning
private function __clone() {}
public static function getInstance(): static {
if (static::$instance === null) {
static::$instance = new static();
}
return static::$instance;
}
public function query(string $sql): array {
return $this->pdo->query($sql)->fetchAll();
}
}
// Usage
$db = Database::getInstance();
$db->query("SELECT * FROM users");