Menu
CoddyTech

Phương thức và thuộc tính static

Thuộc phần Lập trình hướng đối tượng trong hành trình PHP của Coddy. Bài học 17 trên 91.

Tương tự như thuộc tính có thể là thuộc tính tĩnh, phương thức cũng có thể thuộc về chính lớp thay vì từng đối tượng riêng lẻ. Bạn gọi phương thức tĩnh trực tiếp trên lớp mà không cần tạo instance trước.

Bạn khai báo một phương thức tĩnh bằng từ khóa static và gọi phương thức đó bằng tên lớp cùng toán tử :::

<?php
class MathHelper {
    public static function add($a, $b) {
        return $a + $b;
    }
    
    public static function multiply($a, $b) {
        return $a * $b;
    }
}

echo MathHelper::add(5, 3) . "\n";
echo MathHelper::multiply(4, 2);

Đầu ra:

8
8

Phương thức tĩnh hoạt động hiệu quả với các thuộc tính tĩnh. Một cách làm phổ biến là dùng phương thức tĩnh để quản lý dữ liệu dùng chung của lớp:

<?php
class Counter {
    private static $count = 0;
    
    public static function increment() {
        self::$count++;
    }
    
    public static function getCount() {
        return self::$count;
    }
}

Counter::increment();
Counter::increment();
echo Counter::getCount();

Đầu ra:

2

Lưu ý rằng các phương thức tĩnh không thể dùng $this vì không có đối tượng nào được khởi tạo. Chúng chỉ có thể truy cập các thuộc tính tĩnh và các phương thức tĩnh khác bằng self::.

Điểm chính: Phương thức tĩnh hữu ích cho các hàm tiện ích không cần trạng thái của đối tượng hoặc để quản lý dữ liệu cấp lớp. Chúng cung cấp chức năng mà không cần khởi tạo đối tượng.

challenge icon

Thử thách

Dễ

Hãy xây dựng một hệ thống tạo ID dùng các phương thức và thuộc tính tĩnh để tạo mã định danh duy nhất mà không cần khởi tạo đối tượng.

Bạn sẽ tạo hai tệp để sắp xếp code:

  • IdGenerator.php: Định nghĩa lớp IdGenerator để quản lý việc tạo ID duy nhất chỉ bằng các thành phần tĩnh. Lớp này cần có thuộc tính tĩnh riêng tư $lastId bắt đầu từ 0 và thuộc tính tĩnh riêng tư $prefix được đặt thành "ID". Tạo phương thức tĩnh generate() để tăng ID cuối cùng lên một đơn vị và trả về chuỗi đã định dạng, kết hợp tiền tố với ID mới (như "ID1", "ID2", v.v.). Thêm phương thức tĩnh setPrefix($newPrefix) để thay đổi tiền tố và phương thức tĩnh getLastId() để trả về giá trị hiện tại của $lastId.
  • main.php: Nạp tệp lớp IdGenerator. Tạo hai ID bằng tiền tố mặc định và in mỗi ID trên một dòng riêng. Sau đó, dùng phương thức tĩnh để đổi tiền tố thành "USER", tạo thêm hai ID và in từng ID. Cuối cùng, gọi phương thức tĩnh thích hợp để in số ID cuối cùng.

Hãy nhớ rằng bạn gọi trực tiếp phương thức tĩnh trên lớp bằng ClassName::methodName(), còn bên trong lớp, bạn truy cập thuộc tính tĩnh bằng self::$propertyName. Vì không có đối tượng cụ thể, bạn không thể dùng $this trong các phương thức tĩnh.

Đầu ra cần thể hiện tiến trình của các ID với những tiền tố khác nhau, qua đó cho thấy thuộc tính tĩnh giữ nguyên giá trị qua nhiều lần gọi phương thức.

Tự làm thử

<?php

// Nhúng tệp chứa lớp IdGenerator
require_once 'IdGenerator.php';

// TODO: Tạo hai ID với tiền tố mặc định và in mỗi ID trên một dòng riêng

// TODO: Đổi tiền tố thành "USER" bằng phương thức tĩnh

// TODO: Tạo thêm hai ID và in mỗi ID trên một dòng riêng

// TODO: In ra số thứ tự của ID cuối cùng bằng phương thức tĩnh phù hợp

?>
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Trình biên dịch PHP online