Trong PHP, viết hàm bên trong một hàm thì thường gọi là:

Hàm lồng nhau (nested function)


🔹 Ví dụ:

function outer() {
    echo "Đây là outern";

    function inner() {
        echo "Đây là innern";
    }
}

outer();
inner(); // Gọi được sau khi outer đã được gọi

🧠 Giải thích:

  • PHP không thực sự hỗ trợ nested function như trong JavaScript hay Python.
  • Hàm inner() chỉ được định nghĩa sau khi outer() chạy lần đầu tiên.
  • PHP thực chất đưa inner() ra global scope, chứ không phải closure thật sự.

❗ Lưu ý quan trọng:

  • Bạn không thể viết nhiều phiên bản inner() trong các hàm khác nhau – vì PHP không hỗ trợ hàm lồng nhau đúng nghĩa (scoped).
  • Nếu bạn cần closure thực sự, hãy dùng anonymous function hoặc arrow function (PHP 7.4+):

✅ Cách đúng hiện đại: Dùng closure

function outer() {
    $inner = function () {
        echo "Đây là inner closuren";
    };

    $inner(); // Gọi luôn được
}

outer();

✅ Tóm lại

KiểuGọi là gìĐặc điểm
Hàm trong hàm (function A định nghĩa function B)Nested functionPHP hỗ trợ tạm, không chuẩn, nên tránh
Anonymous function trong hàmClosureNên dùng – an toàn, gọn gàng
Arrow function (PHP 7.4+)Arrow function / ClosureDùng khi cần ngắn gọn