PHP - Tính chất tĩnh (Static Properties)

Xin chào các bạn đang học lập trình! Hôm nay, chúng ta sẽ cùng khám phá thế giới thú vị của các tính chất tĩnh trong PHP. Đừng lo lắng nếu bạn là người mới bắt đầu lập trình - tôi sẽ hướng dẫn bạn từng bước với cùng sự kiên nhẫn mà tôi đã sử dụng trong lớp học trong nhiều năm. Hãy bắt đầu nào!

PHP - Static Properties

Tính chất tĩnh là gì?

Trước khi chúng ta nhảy vào mã, hãy hiểu qua về tính chất tĩnh là gì. Hãy tưởng tượng bạn đang ở trong một lớp học (như lớp học của tôi!), và có một bảng trắng mà mọi người đều có thể nhìn thấy và viết lên. Một tính chất tĩnh giống như bảng trắng đó - nó thuộc về lớp itself, không phải thuộc về bất kỳ học sinh nào (hoặc đối tượng nào, trong thuật ngữ lập trình).

Các đặc điểm chính của tính chất tĩnh:

  1. Chúng được chia sẻ giữa tất cả các thể hiện của một lớp.
  2. Chúng có thể được truy cập mà không cần tạo đối tượng của lớp.
  3. Chúng được khai báo bằng từ khóa static.

Bây giờ, hãy xem điều này hoạt động như thế nào trong thực tế!

Ví dụ về tính chất tĩnh

Hãy tạo một lớp đơn giản gọi là Counter để minh họa tính chất tĩnh:

class Counter {
public static $count = 0;

public function increment() {
self::$count++;
}

public static function getCount() {
return self::$count;
}
}

Hãy phân tích này:

  1. Chúng ta khai báo một tính chất tĩnh $count và khởi tạo nó bằng 0.
  2. Phương thức increment() tăng giá trị đếm lên 1.
  3. Phương thức getCount() trả về giá trị hiện tại của đếm.

Bây giờ, hãy sử dụng lớp này:

echo Counter::$count; // Xuất: 0

$counter1 = new Counter();
$counter1->increment();
echo Counter::$count; // Xuất: 1

$counter2 = new Counter();
$counter2->increment();
echo Counter::$count; // Xuất: 2

echo Counter::getCount(); // Xuất: 2

Thật tuyệt vời phải không? Không matter bao nhiêu đối tượng Counter chúng ta tạo ra, chúng đều chia sẻ cùng một $count. Nó giống như tất cả các học sinh trong lớp tôi chia sẻ một bảng đếm!

Từ khóa "self"

Bạn có thể đã nhận thấy chúng tôi đã sử dụng self::$count trong lớp của chúng tôi. Từ khóa self giống như nói "lớp này" - nó tham chiếu đến lớp hiện tại. Nó đặc biệt hữu ích với các tính chất và phương thức tĩnh.

Hãy mở rộng lớp Counter của chúng ta để xem thêm các sử dụng của self:

class Counter {
public static $count = 0;
private static $secretCount = 100;

public function increment() {
self::$count++;
self::incrementSecretCount();
}

private static function incrementSecretCount() {
self::$secretCount++;
}

public static function getSecretCount() {
return self::$secretCount;
}
}

Ở đây, chúng ta đã thêm một $secretCount là riêng tư (shh, nó là một bí mật!). Chúng ta sử dụng self để truy cập cả các tính chất và phương thức tĩnh trong lớp.

Từ khóa "parent"

Bây giờ, hãy nói về kế thừa và từ khóa parent. Hãy tưởng tượng bạn đang học nấu ăn từ cha mẹ của bạn. Bạn có thể sử dụng một số công thức của họ (phương thức kế thừa) nhưng thêm một chút twist của riêng bạn. Trong PHP, parent cho phép bạn truy cập các phương thức và tính chất từ lớp cha.

Hãy tạo một SuperCounter kế thừa Counter của chúng ta:

class SuperCounter extends Counter {
public function superIncrement() {
parent::increment();
parent::increment();
self::$count++; // Chúng ta vẫn có thể sử dụng self cho tính chất kế thừa
}
}

Sử dụng SuperCounter của chúng ta:

$superCounter = new SuperCounter();
$superCounter->superIncrement();
echo SuperCounter::$count; // Xuất: 3

Phương thức superIncrement() gọi phương thức increment() của lớp cha hai lần và sau đó tăng một lần nữa, dẫn đến tổng tăng là 3.

Bảng tóm tắt các phương thức liên quan đến tĩnh

Hãy tóm tắt các phương thức tĩnh mà chúng ta đã thấy trong một bảng tiện lợi:

Phương thức Mô tả
self::$property Truy cập một tính chất tĩnh trong cùng lớp
self::method() Gọi một phương thức tĩnh trong cùng lớp
ClassName::$property Truy cập một tính chất tĩnh từ bên ngoài lớp
ClassName::method() Gọi một phương thức tĩnh từ bên ngoài lớp
parent::method() Gọi phương thức của lớp cha trong lớp con

Kết luận

Và thế là bạn đã có, các bạn! Chúng ta đã khám phá thế giới của các tính chất tĩnh trong PHP, từ việc sử dụng cơ bản đến kế thừa. Nhớ rằng, các tính chất tĩnh giống như bảng trắng trong lớp học - chia sẻ bởi tất cả và có thể truy cập bởi bất kỳ ai biết tên lớp.

Như với bất kỳ công cụ nào trong lập trình, hãy sử dụng các tính chất tĩnh một cách khôn ngoan. Chúng rất hữu ích cho các bộ đếm, thiết lập cấu hình, hoặc bất kỳ dữ liệu nào nên được chia sẻ giữa tất cả các thể hiện của một lớp. Nhưng việc lạm dụng chúng có thể dẫn đến mã khó quản lý và kiểm tra.

Tiếp tục luyện tập, và sớm bạn sẽ sử dụng các tính chất tĩnh như một chuyên gia! Và nhớ rằng, trong lập trình cũng như trong lớp học của tôi, không có câu hỏi ngốc nghếch - chỉ có cơ hội để học hỏi. Chúc các bạn lập trình vui vẻ!

Credits: Image by storyset