Hướng đối tượng trong PHP: Singleton Pattern

Hướng đối tượng trong PHP: Singleton Pattern

Đây là mẫu thiết kế được các lập trình viên sử dụng phổ biến. Mục đích chính của mẫu Singleton là cung cấp một việc khởi tạo đối tượng chỉ duy nhất một lần cho dù bạn gọi lại nó bao nhiêu lần, điều này giúp tiết kiệm bộ nhớ và ngăn chặn việc tạo ra nhiều lần khởi tạo đối tượng, mẫu Singleton được sử dụng để nâng cao hiệu xuất thực thi ứng dụng. Xem ví dụ sau để hiểu rõ điều này.

class A{
    private static $a;
    public function __construct(){
        if(!self::$a){
            self::$a = $this;
            echo 'Khai bao moi<br />';
            return self::$a;
        }else{
            echo 'Khai bao cu<br />';
            return self::$a;
        }
    }
}
$s = new A(); // Khai bao moi
$s = new A(); // Khai bao cu
$s = new A(); // Khai bao cu

Điều này có thể giải thích đơn giản là khi khởi tạo đối tượng lần đầu thì đối tượng sẽ được lưu vào một thuộc tính đang ở trạng thái rỗng chưa có giá trị và những lần khởi tạo đối tượng sau chỉ cần trả về thuộc tính đã lưu thông tin đối tượng, và thuộc tính này được khai báo phạm vi là private nên cũng không thể truy cập ở bên ngoài lớp được.

Chúng ta sẽ cùng xem xét một ví dụ về việc sử dụng mẫu Singleton trong việc sử dụng biến toàn cầu.

class A{
    public $ta = 'Khuong Van Ngo';
    private static $tb;
    private function __construct(){}
    public static function getInstance(){
        if(!self::$tb){
            self::$tb = new A();
        }
        return self::$tb;
    }
}
$s = A::getInstance();
$s->ta = 'VanKhuong777';
unset($s);
$s2 = A::getInstance();
echo $s2->ta; // vankhuong777

Trong ví dụ trên phương thức __construct được khai báo phạm vi là private điều này sẽ làm cho bạn không thể khởi tạo đối tượng theo cách thông thường với từ khóa new mà bạn phải khởi tạo thông qua một phương thức khác như ví dụ trên là phương thức getInstance với khai báo static, nó sẽ làm nhiệm vụ khởi tạo đối tượng. Kết quả trên ta thấy ngay cả khi đối tượng bị hủy thì thuộc tính "ta" vẫn lưu thông tin từ lần khởi tạo đối tượng trước, điều này làm rõ cách thức sử dụng của mẫu Singleton và cho thấy mẫu Singleton đã cải tiến các biến toàn cầu trong môi trường hướng đối tượng như thế nào.

Tham khảo "Object-Oriented Programming with PHP5 - Hasin Hayder,  PHP Objects, Patterns and Practice -  Matt Zandstra"

Tags: 
Bạn thấy bài viết này như thế nào?: 
Average: 2.9 (70 votes)
Ảnh của Khanh Hoang

Khanh Hoang - Kenn

Kenn is a user experience designer and front end developer who enjoys creating beautiful and usable web and mobile experiences.

Bình luận (0)

 

Add Comment

Filtered HTML

  • Các địa chỉ web và email sẽ tự động được chuyển sang dạng liên kết.
  • Các thẻ HTML được chấp nhận: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Tự động ngắt dòng và đoạn văn.

Plain text

  • No HTML tags allowed.
  • Các địa chỉ web và email sẽ tự động được chuyển sang dạng liên kết.
  • Tự động ngắt dòng và đoạn văn.
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.

Advertisement

 

jobsora

Dich vu khu trung tphcm

Dich vu diet chuot tphcm

Dich vu diet con trung

Quảng Cáo Bài Viết

 
EU - Châu Âu tố cáo Facebook bí mật theo dõi người dùng

EU - Châu Âu tố cáo Facebook bí mật theo dõi người dùng

Mạng xã hội đồng nghĩa với việc thông tin sẽ trở nên mở hơn và dễ tương tác hơn, nhưng nó vẫn phải đi kèm với tính bảo mật cá nhân

www.zini.vn - mạng xã hội của VNG - Việt Nam

www.zini.vn - mạng xã hội của VNG - Việt Nam

Hôm qua 1/4 VNG đã cho ra mắt dịch vụ tiểu blog Zini, cạnh tranh đồng thời với Twitter, Facebook, Google+ và đối thủ tại Việt Nam là LinkHay của VCCorp.

Drupal 8: Writing a Hello World Module

Drupal 8: Thử viết Hello World Module

It's been a while since I've sat down and tried to write a module from scratch in Drupal 8. I've dabbled here and there in the various already existing modules but there's always something interesting about just trying to write that simple 

Công ty diệt chuột T&C

 

Diet con trung