Trang chủ » Blog » [Thực hành] Tạo một đối tượng duy nhất của lớp

[Thực hành] Tạo một đối tượng duy nhất của lớp

bởi CodeGym | 26/12/2023 17:15 | Bài thực hành | Blog

Mục tiêu

Luyện tập sử dụng phương thức static và thuộc tính static để tạo một đối tượng duy nhất của lớp.

Mô tả- Tạo một đối tượng duy nhất của lớp

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.

Hướng dẫn

Mã nguồn của lớp Application:

<?php
class Application {
    private static $instance;

    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.

Giữ cho constructor là private

Có một vấn đề với mã nguồn trên, đó là người dùng vẫn có thể sử dụng constructor của lớp Application, do đó vẫn có khả năng tạo ra nhiều đối tượng của lớp này. Chúng ta có thể cải tiến mã nguồn để không cho phép người dùng sử dụng constructor nữa, bằng cách biến constructor thành private.

<?php
class Application {
    private static $instance;

    private function __construct()
    {
    }

    public static function getInstance() {
        if(self::$instance === null) {
            self::$instance = new Application();
            echo 'alo';
        }
        return self::$instance;
    }
}

$app1 = Application::getInstance();
$app2 = Application::getInstance();
$app3 = new Application(); //Error

Ở đoạn mã đã cải tiến này, hàm __construct() đã được khai báo là private, do đó sẽ không được phép khởi tạo đối tượng sử dụng constructor nữa, mà bắt buộc phải sử dụng phương thức getInstance().

Lưu ý: Cách làm này còn được gọi là Singleton Pattern, chúng ta sẽ tìm hiểu kỹ hơn về Design Pattern trong phần sau của khoá học.

Trên đây CodeGym đã cùng với bạn luyện tập sử dụng phương thức static và thuộc tính static. Hãy chụp ảnh màn hình và nộp bài thực hành của bạn trên CodeGymX để cùng nhau luyện tập nhé!

Tags:

0 Lời bình

Gửi Lời bình

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

BÀI VIẾT LIÊN QUAN

BẠN MUỐN HỌC LẬP TRÌNH?

GỌI NGAY

098 953 44 58

Đăng ký tư vấn lộ trình học lập trình

Đăng ký tư vấn, định hướng lộ trình học và giải đáp các thắc mắc về ngành nghề – Miễn phí – Online.

4 + 9 =

TƯ VẤN VỀ LỘ TRÌNH HỌC NGHỀ LẬP TRÌNH TẠI CODEGYM
TƯ VẤN VỀ LỘ TRÌNH HỌC NGHỀ LẬP TRÌNH TẠI CODEGYM