Khi bạn lập trình, việc hiểu phạm vi và quyền truy cập của biến là một trong những điều rất quan trọng để tránh lỗi khó chịu và đảm bảo code hoạt động như mong muốn. Trong PHP, biến không “đi lang thang” tự do được – mỗi biến có phạm vi (scope) nhất định. Bài học hôm nay sẽ giúp bạn phân biệt rõ giữa biến cục bộ, biến toàn cục, và các biến đặc biệt gọi là superglobal.
Khởi động nhẹ: Biến là gì?
Ở những bài trước, bạn đã quen với việc khai báo biến, gán giá trị, và dùng chúng trong câu lệnh. Nhưng chưa chắc bạn đã biết: cùng một tên biến $x, nếu được dùng ở nhiều nơi khác nhau trong chương trình thì nó chưa chắc mang cùng một giá trị – vì còn tùy vào phạm vi hoạt động của nó.
Biến cục bộ (Local Variable)
Biến cục bộ chỉ tồn tại trong một hàm nhất định. Khi bạn khai báo một biến bên trong hàm, nó chỉ dùng được trong hàm đó thôi.
function sayHello() {
$greeting = "Xin chào!";
echo $greeting;
}
sayHello(); // In ra: Xin chào!
echo $greeting; // Lỗi! Biến $greeting không tồn tại ở ngoài hàm
📌 Ghi nhớ: Biến cục bộ “sống và chết” trong hàm. Ngoài phạm vi đó, PHP không hề biết đến sự tồn tại của nó.
Biến toàn cục (Global Variable)
Biến toàn cục được khai báo ngoài mọi hàm và có thể được dùng lại ở nhiều nơi – nhưng không trực tiếp dùng được bên trong hàm. Muốn truy cập, bạn phải dùng từ khóa global.
$message = "Chào cả lớp!";
function greet() {
global $message;
echo $message;
}
greet(); // In ra: Chào cả lớp!
Superglobal – “Đặc quyền toàn cõi PHP”
PHP có một nhóm các biến được tạo sẵn và luôn luôn có mặt, không cần khai báo, và có thể dùng ở bất kỳ đâu – gọi là biến superglobal. Những cái tên này chắc chắn bạn sẽ gặp rất nhiều trong thực tế khi làm web:
| Biến superglobal | Mô tả ngắn |
|---|---|
$_GET | Dữ liệu từ URL (query string) |
$_POST | Dữ liệu gửi từ form |
$_REQUEST | Tổng hợp của GET, POST, COOKIE |
$_SERVER | Thông tin máy chủ, header, địa chỉ IP… |
$_SESSION | Dữ liệu phiên đăng nhập |
$_COOKIE | Dữ liệu cookie |
$_FILES | Dữ liệu file upload |
$_ENV | Biến môi trường |
$_GLOBALS | Truy cập mọi biến toàn cục |
Ví dụ:
echo $_SERVER['HTTP_USER_AGENT']; // In ra trình duyệt mà người dùng đang dùng
📌 Lưu ý: Superglobal là mạch máu của ứng dụng web PHP – chúng là “người vận chuyển” dữ liệu giữa client và server.
Một chút về $_GLOBALS
Nếu bạn muốn truy cập biến toàn cục mà không dùng global, bạn có thể dùng mảng $_GLOBALS.
$site = "vnwebpro.com";
function showSite() {
echo $_GLOBALS['site'];
}
showSite(); // In ra: vnwebpro.com
Tổng kết
- Biến cục bộ: chỉ dùng trong hàm.
- Biến toàn cục: dùng được ở mọi nơi nếu biết cách.
- Biến superglobal: có sẵn, dùng ngay, cực kỳ hữu ích trong ứng dụng web.
Bài tập áp dụng
- Viết hàm
tangSo()làm tăng biến$demlên 1 mỗi lần gọi, sử dụngglobal. - In ra trình duyệt người dùng đang sử dụng bằng
$_SERVER. - Thêm một form đơn giản gửi dữ liệu bằng
POST, rồi đọc lại giá trị đã gửi bằng$_POST.
Trong bài học tiếp theo, bạn sẽ được tìm hiểu về hàm trong PHP – một cách tuyệt vời để tổ chức lại đoạn code của bạn và tái sử dụng chúng như một nhà lập trình chuyên nghiệp.

Thảo luận