Phương thức Singleton trong PHP là gì?

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

________số 8_______

  
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ả Singleton

Trong 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

Chủ Đề