Giống nhau

Cả hai đều dùng để truy cập / chỉnh sửa biến global bên trong function hoặc method.

$myVar = 123;
function test() {
    global $myVar;
    echo $myVar; // 123
}
function test() {
    echo $GLOBALS['myVar']; // 123
}

➡️ Kết quả giống nhau


Khác nhau (điểm cốt lõi)

1️⃣ Bản chất

global $myVar

  • keyword
  • Tạo alias (tham chiếu) tới biến global
  • PHP xử lý tương đương:
$myVar =& $GLOBALS['myVar'];

$GLOBALS['myVar']

  • mảng superglobal
  • Truy cập trực tiếp vào biến global
  • Không cần global

2️⃣ Phạm vi sử dụng

Trường hợpglobal $myVar$GLOBALS['myVar']
function thường
method trong class
closure / callback
include file⚠️

Ví dụ closure:

$myVar = 10;
$fn = function () {
    // global $myVar; ❌ không hoạt động
    echo $GLOBALS['myVar']; // ✅
};

3️⃣ Độ rõ ràng code

global $myVar;
$myVar = 5;

👉 Khó nhìn ra đang ghi vào global

$GLOBALS['myVar'] = 5;

👉 Rõ ràng: đang đụng global


4️⃣ Khả năng tạo biến mới

Cả hai đều có thể tạo biến global mới

function test() {
    global $a;
    $a = 1;
}
function test() {
    $GLOBALS['b'] = 2;
}

Nên dùng cái nào?

✅ Dùng global $myVar khi:

  • Code legacy
  • WordPress (global $wpdb)
  • Function ngắn, quen tay

✅ Dùng $GLOBALS['myVar'] khi:

  • Closure / hook / callback
  • Debug nhanh
  • Muốn code rõ ràng, dễ đọc

❌ Tránh cả hai khi:

  • Code mới
  • Dự án lớn, lâu dài

👉 Nên dùng class / DI / singleton