quang cao hosting

[PHP] Phương thức getInstance() là gì và tại sao dùng getInstance();

Xem: 10154    Tải: 0   Thảo luận: 0   Mục: Php&mySql   Lĩnh vực: Khác

0 điểm   ( 76 đánh giá ) File đã được kiểm thử

 getInstance() trong class là một phương thức static. Nó thường dùng để khởi tạo một class mà không cần dùng đến cú pháp new Foo()

Cú pháp thông thường:

  1. $temp =  new Foo();

Sử dụng getInstance();

  1. $temp = Foo::getInstance();

Phương thức getInstance() dùng để làm gì ???

Tình huống: (Singleton pattern)

Giả định mình có một class Registry và mình muốn tạo một đối tượng di nhất cho class này cho ứng dụng của mình. Nghĩa là nếu đối tượng thuộc lớp Registry chưa tồn tại thì mình sẽ tạo một đối tượng mới, ngược lại đã có một đối tượng được tạo rùi thì mình sẽ chỉ cần lấy nó ra mà dùng thôi .

Giải pháp:

Sử dụng phương thức getInstance(), tức là trong class Registry ta tạo một phương thức getInstance().

Khi muốn tạo hay lấy đối tượng (là di nhất) thuộc class này thì chỉ cần sử dụng dòng lệnh Registry::getInstance();

Cụ thể như sau:

  1. class Registry
  2. {
  3.   private static $instance;
  4.   private function __construct(){}
  5.   private function __clone(){}
  6.   public static function getInstance(){
  7.      
  8.   // kiểm tra xem liệu đối tượng đã được tạo chưa (thông qua thuộc tính static $instance đã được set chưa).
  9.        if( !isset( self::$instance ) ){
  10.           // nếu chưa thì tạo mới một đối tượng
  11.          self::$instance = new Registry();
  12.          }
  13.       // Trả về chính đối tượng đã được tạo trước đó
  14.        return self::$instance;
  15.        }
  16. }

Như vậy mổi khi mình muốn sử dụng đối tượng Registry (di nhất) này thì mình sẽ gọi phương thức getInstance()

Registry::getInstance();

Vấn đề quan tâm (nếu có) ở đây là thuộc tính static $instance, phương thức static getInstance() và từ khóa self.

- Thuộc tính static (cũng giống như các ngôn ngữ lập trình khác) là thuộc tính dùng chung (tham chiếu) cho tất cả các instance của class đó.

- Với phương thức static thì ta có thể truy xuất đến phương thức đó mà hok cần thông qua một đối tượng (instance) của class.

Registry::getInstance(); // OK

- Vì $instance là thuộc tính static nên ta sẽ dùng từ khóa self (ko dùng $this) để truy cập đến thuộc tính này ( Vì self sẽ tham chiếu đến class còn $this tham chiếu đến đối tượng hiện tại, cụ thể).

Thêm 1 ví dụ cụ thể nữa:

  1. class ABC{
  2.     static $a = "hhhhhhhh";
  3.     static $_instance;
  4.     static function getInstance(){
  5.         if(self::$_instance !== null){
  6.             return self::$_instance;
  7.         }
  8.         self::$_instance = new ABC();
  9.         return self::$_instance;
  10.     }
  11.     function xxx(){
  12.         echo $this->a . "<br>";
  13.     }
  14. }
  15. $abc = ABC::getInstance();
  16. $abc->a = "123";
  17. $abc->xxx();
  18. $abc2 = ABC::getInstance();
  19. $abc2->xxx();

Output sẽ là:

  1. 123
  2. 123

Chúc thành công !

[PHP] Phương thức getInstance() là gì và tại sao dùng getInstance();

[PHP] Phương thức getInstance() là gì và tại sao dùng getInstance(); Đăng ngày 08-02-2014  getInstance() trong class là một phương thức static. Nó thường dùng để khởi tạo một class mà không cần dùng đến cú pháp new Foo() 5/10 10154

Thảo luận:

Để bình luận bạn phải đăng nhập thành viên.

File tương tự

Files cùng mục

 
File gợi ý cho bạn
File tải nhiều nhất
Megacode.vn - Thư viện mã nguồn chia sẻ, tải file cho cộng đồng
Copyright © 2013-2021. All rights reserved. Bản quyền thuộc VinaGon
Email: [email protected]
Hotline: 086.924.3838