Biến toàn cục, biến cục bộ và biến Superglobal trong PHP

yanyan

By yanyan

Cập nhật Tháng 9 23, 2025

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 superglobalMô tả ngắn
$_GETDữ liệu từ URL (query string)
$_POSTDữ liệu gửi từ form
$_REQUESTTổng hợp của GET, POST, COOKIE
$_SERVERThông tin máy chủ, header, địa chỉ IP…
$_SESSIONDữ liệu phiên đăng nhập
$_COOKIEDữ liệu cookie
$_FILESDữ liệu file upload
$_ENVBiến môi trường
$_GLOBALSTruy 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

  1. Viết hàm tangSo() làm tăng biến $dem lên 1 mỗi lần gọi, sử dụng global.
  2. In ra trình duyệt người dùng đang sử dụng bằng $_SERVER.
  3. 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

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Đăng ký nhận tin mới

Nhận bài học, tài nguyên và cơ hội việc làm qua email hàng tuần.

[global_subscribe_form]

Chúng tôi cam kết không spam. Bạn có thể hủy bất cứ lúc nào.