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