Biến static trong PHP: Kỹ thuật tối ưu hiệu năng mà nhiều dev bỏ qua

Trong PHP, biến static là một kỹ thuật đơn giản nhưng cực kỳ mạnh để tối ưu hiệu năng, giảm chi phí tính toán lặp lại và cải thiện tốc độ xử lý. Tuy nhiên, nhiều lập trình viên hoặc chưa hiểu rõ, hoặc sử dụng sai cách dẫn đến bug khó debug. Bài viết này sẽ giúp bạn nắm chắc cách hoạt động và ứng dụng thực tế của biến static trong PHP.

Biến static trong PHP: Kỹ thuật tối ưu hiệu năng mà nhiều dev bỏ qua

Biến static trong PHP là gì?

Biến static trong function là biến chỉ được khởi tạo một lần duy nhất, và sẽ giữ giá trị giữa các lần gọi hàm.

function counter() {
    static $count = 0;
    $count++;
    return $count;
}

Kết quả:

counter(); // 1
counter(); // 2
counter(); // 3

Khác với biến thông thường, biến static không bị reset sau mỗi lần gọi hàm.

Vì sao nên dùng static?

  • Tránh tính toán lặp lại
  • Cache dữ liệu tạm trong request
  • Giảm truy vấn database không cần thiết

Đây là một dạng in-memory cache scope nhỏ (per-request).

Use Case 1: Cache kết quả function

Ví dụ hàm nặng:

function get_expensive_data($id) {
    static $cache = [];

    if (isset($cache[$id])) {
        return $cache[$id];
    }

    // giả lập query nặng
    $data = query_database($id);

    $cache[$id] = $data;
    return $data;
}

Lợi ích:

  • Gọi nhiều lần cùng $id → không query lại
  • Giảm load DB đáng kể

Use Case 2: Cache config hoặc constant runtime

function get_config() {
    static $config = null;

    if ($config === null) {
        $config = load_config_file();
    }

    return $config;
}

Đảm bảo file config chỉ load một lần duy nhất.

Use Case 3: Tối ưu function helper được gọi nhiều lần

function get_current_user_id() {
    static $user_id = null;

    if ($user_id === null) {
        $user_id = auth()->id();
    }

    return $user_id;
}

Tránh gọi auth system nhiều lần trong cùng request.

So sánh static vs global vs class property

  • static trong function: scope nhỏ, an toàn, dễ kiểm soát
  • global: dễ gây side-effect, khó debug
  • class static property: dùng cho shared state lớn hơn

Trong đa số trường hợp, static trong function là lựa chọn “sạch” nhất.

Lưu ý quan trọng

  • Static chỉ tồn tại trong 1 request (không phải cache lâu dài)
  • Không dùng cho dữ liệu cần đồng bộ giữa user
  • Cẩn thận với dữ liệu phụ thuộc context (user, locale…)

Khi nào không nên dùng static?

  • Dữ liệu thay đổi liên tục trong cùng request
  • Logic phụ thuộc nhiều tham số phức tạp
  • Khi cần clear cache giữa các lần gọi

Best Practice

  • Dùng static cho pure function hoặc idempotent logic
  • Ưu tiên array cache theo key (thay vì 1 value)
  • Kết hợp với cache layer (Redis, Memcached) nếu cần persistence

Kết luận

Biến static trong PHP là một kỹ thuật nhỏ nhưng mang lại hiệu quả lớn nếu dùng đúng cách. Nó giúp giảm chi phí tính toán, tối ưu truy vấn và làm code gọn hơn mà không cần đến hệ thống cache phức tạp. Với những hệ thống xử lý nhiều logic như recommendation hoặc ranking, việc tận dụng static đúng chỗ có thể cải thiện hiệu năng đáng kể.

Bình luận


  • Không có bình luận.

Init Toolbox

Nhấn Ctrl + \ trên máy tính, hoặc vuốt sang trái ở bất kỳ đâu trên mobile.

Đăng nhập





Đang tải...