Ví dụ về Singleton Pattern trong PHP
Hướng dẫn về Singleton Pattern trong PHP, bao gồm ví dụ cụ thể giúp bạn hiểu cách sử dụng mẫu thiết kế này trong lập trình hướng đối tượng.
Singleton pattern đảm bảo rằng chỉ có một instance duy nhất của class được khởi tạo trong suốt thời gian chạy chương trình. Đây là một pattern quan trọng để quản lý tài nguyên chung như kết nối cơ sở dữ liệu.
<?php
// Singleton Pattern trong PHP
class Singleton {
// Thuộc tính lưu trữ instance duy nhất của class
private static $instance = null;
// Constructor private để ngăn việc tạo instance từ bên ngoài class
private function __construct() {
echo "Instance được tạo.\n";
}
// Ngăn việc clone instance
private function __clone() {}
// Ngăn việc unserialize instance
private function __wakeup() {}
// Phương thức để lấy instance duy nhất của class
public static function getInstance() {
if (self::$instance === null) {
self::$instance = new Singleton();
}
return self::$instance;
}
// Một phương thức đơn giản để minh họa
public function doSomething() {
echo "Thực hiện một hành động từ instance Singleton.\n";
}
}
// Lấy instance của Singleton
$singleton1 = Singleton::getInstance();
$singleton1->doSomething();
// Cố gắng lấy instance khác
$singleton2 = Singleton::getInstance();
$singleton2->doSomething();
// Kiểm tra xem cả hai instance có phải là cùng một đối tượng không
var_dump($singleton1 === $singleton2); // Kết quả: true
?>
Giải thích chi tiết:
-
private static $instance = null;
: Thuộc tính này lưu trữ instance duy nhất của classSingleton
. Ban đầu, nó được thiết lập lànull
. -
private function __construct();
: Constructor được đặt làprivate
để ngăn việc tạo instance mới từ bên ngoài class. -
private function __clone();
vàprivate function __wakeup();
: Ngăn việc clone hoặc unserialize đối tượng để tránh tạo ra nhiều instance. -
public static function getInstance();
: Đây là phương thức quan trọng của Singleton pattern. Nó kiểm tra xem instance đã được tạo chưa. Nếu chưa, nó sẽ tạo instance và lưu trữ trong thuộc tính$instance
. Nếu đã có, nó trả về instance hiện có. -
doSomething();
: Một phương thức minh họa hành động nào đó mà instance củaSingleton
có thể thực hiện. -
$singleton1 === $singleton2;
: Kiểm tra xem cả hai instance có phải là cùng một đối tượng không. Kết quả làtrue
, chứng minh rằng chỉ có một instance được tạo ra.
Phiên bản PHP:
Mã này tương thích với PHP 5.0 trở lên.