Mẫu Singleton là một trong những Mẫu GoF [Gang of Four]. Mẫu cụ thể này cung cấp một phương pháp để giới hạn số lượng phiên bản của một đối tượng chỉ còn một. Đó là một mô hình dễ nắm bắt khi bạn vượt qua cú pháp lạ được sử dụng
Hãy xem xét lớp sau
Mã PHP
class Database { public function __construct[] { .. } public function connect[] { .. } public function query[] { .. } .. }
Lớp này tạo một kết nối đến cơ sở dữ liệu của chúng tôi. Bất cứ khi nào chúng ta cần một kết nối, chúng ta tạo một thể hiện của lớp, chẳng hạn như
Mã PHP
$pDatabase = new Database[]; $aResult = $pDatabase->query['...'];
Giả sử chúng ta sử dụng phương pháp trên nhiều lần trong suốt thời gian tồn tại của tập lệnh, mỗi lần chúng ta tạo một phiên bản, chúng ta đang tạo một đối tượng Cơ sở dữ liệu mới [chúng ta cũng đang tạo một kết nối cơ sở dữ liệu mới, nhưng điều đó không liên quan trong ví dụ này] và do đó sử dụng nhiều hơn . Đôi khi bạn có thể cố tình muốn có nhiều thể hiện của một lớp nhưng trong trường hợp này chúng ta không
Phương pháp Singleton là một giải pháp cho vấn đề phổ biến này. Để biến lớp Cơ sở dữ liệu thành Singleton, trước tiên chúng ta cần thêm thuộc tính mới vào lớp, chúng ta sẽ gọi đây là $m_pInstance
Mã PHP
class Database { // Store the single instance of Database private static $m_pInstance; ... }
Như nhận xét nêu rõ, thuộc tính này sẽ được sử dụng để lưu trữ một thể hiện duy nhất của lớp Cơ sở dữ liệu của chúng tôi. Bạn cũng nên lưu ý rằng thuộc tính này phải là tĩnh
Tiếp theo, chúng ta cần thay đổi phạm vi của hàm tạo thành riêng tư. Đây là một trong những cú pháp kỳ lạ thường khiến mọi người bối rối
Mã PHP
class Database{ // Store the single instance of Database private static $m_pInstance; private function __construct[] { .. } }
Bằng cách đặt hàm tạo ở chế độ riêng tư, chúng tôi đã cấm các đối tượng của lớp được khởi tạo từ bên ngoài lớp. Vì vậy, ví dụ sau đây không còn hoạt động bên ngoài lớp học
Mã PHP
$pDatabase = new Database[];
Bây giờ chúng ta cần thêm một phương thức để tạo và trả về Singleton của chúng ta. Thêm phương thức sau vào lớp Cơ sở dữ liệu
Mã PHP
public static function getInstance[]{ if [!self::$m_pInstance]{ self::$m_pInstance = new Database[]; } return self::$m_pInstance; }
Chức năng trông buồn cười này chịu trách nhiệm xử lý thể hiện đối tượng của chúng tôi. Tương đối dễ hiểu, về cơ bản chúng ta kiểm tra thuộc tính tĩnh $m_pInstance, nếu nó không hợp lệ chúng ta tạo một thể hiện mới của lớp Cơ sở dữ liệu bằng cách gọi hàm tạo. Hãy nhớ rằng, chúng tôi đã đặt phương thức __construct[] ở chế độ riêng tư, do đó, một thể hiện của đối tượng chỉ có thể được tạo từ bên trong các phương thức của lớp. Cuối cùng, hàm trả về một tham chiếu đến thuộc tính tĩnh của chúng ta. Trong các lệnh gọi getInstance[] tiếp theo, $m_pInstance sẽ hợp lệ và do đó, tham chiếu sẽ được trả về - không có phiên bản mới nào được tạo
Vì vậy, lớp Cơ sở dữ liệu của chúng tôi bây giờ trông giống như thế này
Mã PHP
class Database{ // Store the single instance of Database private static $m_pInstance; private function __construct[] { .. } public static function getInstance[]{ if [!self::$m_pInstance]{ self::$m_pInstance = new Database[]; } return self::$m_pInstance; } }
Giờ đây, bạn có thể lấy một phiên bản của lớp Cơ sở dữ liệu từ bất kỳ đâu [không cần sử dụng các đối số toàn cầu hoặc hàm] trong dự án của bạn. Đây là một ví dụ và so sánh
Đây là cách thông thường chúng ta tạo đối tượng
Mã PHP
$pDatabase = new Database[]; $aResult = $pDatabase->query['...'];
Đây là cách Singleton
Mã PHP
Tóm lại, Singleton là một mẫu thiết kế dễ sử dụng để giới hạn số lượng phiên bản của một đối tượng
của Janeth Kent Ngày. 02-04-2022 mẫu php singleton lớp oop objects hits : 2388
Janeth Kent
Licenciada en Bellas Artes y programadora por pasión. Cuando tengo un rato retoco fotos, edito videoeos y diseño cosas. El resto del tiempo escribo en MA-NO WEB DESIGN AND DEVELOPMENT
/ Mẫu thiết kế / Mẫu sáng tạo / Singleton
Mẫu thiết kế Singleton trong PHPQuay lại mô tả SingletonTrong mẫu đơn, một lớp có thể phân phối một thể hiện của chính nó cho các lớp khác