Hướng dẫn php get instance - phiên bản php get
Show
Mục tiêuLuyện tập sử dụng phương thức static và thuộc tính static. Mô tảHướng dẫn Hướng dẫnLuyện tập sử dụng phương thức static và thuộc tính static. Trong phần này, chúng ta sẽ tạo một lớp Application và đảm bảo rằng chỉ có một đối tượng Application duy nhất được tạo ra. Kỹ thuật này là rất hữu ích trong những trường hợp chúng ta muốn chia sẻ một đối tượng duy nhất trong suốt vòng đời của ứng dụng, hoặc để tiết kiệm tài nguyên. Mã nguồn của lớp Application: $app1 = Application::getInstance(); public static function getInstance() {if(self::$instance === null) {self::$instance = new Application();}return self::$instance;}} $app1 = Application::getInstance();$app2 = Application::getInstance(); Trong ví dụ trên, chúng ta không khởi tạo đối tượng của lớp Application sử dụng constructor mà sử dụng một phương thức static là getInstance(). Biến $instance giúp cho chúng ta trỏ đến một đối tượng duy nhất của Application, và cũng chỉ có một đối tượng duy nhất được sinh ra. Ở những lần sau, khi gọi phương thức getInstance() thì đối tượng có sẵn đó sẽ được trả về mà không tạo thêm đối tượng mới.
Wed, 6/03/2013, 10:32 (GMT+7)0 Bình luận class A{ private static $a; public function __construct(){ if(!self::$a){ self::$a = $this; echo 'Khai bao moi 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{ 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 Đ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. 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"Bạn thấy bài viết này như thế nào?: |