Biến toàn cục PHP có thể truy cập trực tiếp từ bất kỳ phần nào của tập lệnh PHP miễn là nó nằm ngoài function
Ví dụ: giả sử bạn chia mã ở trên thành hai tệp PHP có liên quan bằng cách sử dụng từ khóa
0
Tập lệnh
1 vẫn có thể truy cập các biến
2 và
3 miễn là bạn
0 hoặc
5 tập lệnh như được hiển thị ở trênTruy cập các biến toàn cục PHP từ một hàm
Biến toàn cục không có sẵn trực tiếp bên trong hàm PHP
Khi bạn truy cập một biến toàn cục từ một hàm, cảnh báo biến không xác định sẽ xuất hiện
$name = "Nathan";
function greetings[] {
echo $name; // Warning: Undefined variable $name
}
greetings[];
Có hai cách bạn có thể truy cập các biến toàn cục PHP từ một hàm
- Khai báo các biến sử dụng từ khóa
6 - Truy cập mảng
7
Hãy cùng tìm hiểu về các phương pháp này tiếp theo
Truy cập các biến toàn cục PHP bằng từ khóa toàn cục
Từ khóa
6 được sử dụng để tham chiếu các biến từ phạm vi toàn cầu bên trong các hàm PHPĐây là một ví dụ về việc sử dụng từ khóa
6$name = "Nathan";
function greetings[] {
global $name;
echo $name;
}
//👇 prints Nathan
greetings[];
Trong đoạn mã trên,
$name = "Nathan";
function greetings[] {
echo $name; // Warning: Undefined variable $name
}
greetings[];
0 được khai báo toàn cục bên trong hàm, do đó, $name = "Nathan";
function greetings[] {
echo $name; // Warning: Undefined variable $name
}
greetings[];
0 từ bên ngoài hàm được nhập vào hàmTừ khóa
6 trỏ đến biến toàn cục mà không sao chép giá trịKhi bạn thay đổi giá trị
$name = "Nathan";
function greetings[] {
echo $name; // Warning: Undefined variable $name
}
greetings[];
0 bên trong hàm, giá trị thực tế của $name = "Nathan";
function greetings[] {
echo $name; // Warning: Undefined variable $name
}
greetings[];
0 cũng sẽ thay đổi theo$name = "Nathan";
function greetings[] {
global $name;
$name = "Joe";
echo $name;
}
//👇 prints Joe
greetings[];
//👇 prints Joe as well
echo $name;
Hãy ghi nhớ điều này khi bạn đang truy cập biến từ nhiều hàm, vì biến có thể đã bị thay đổi khi bạn truy cập nó
Để truy cập các biến toàn cục từ nhiều hàm, bạn có thể sử dụng từ khóa
6 trong mỗi hàm như sau$name = "Nathan";
function nav[] {
global $name;
echo $name;
}
function body[] {
global $name;
echo $name;
}
function footer[] {
global $name;
echo $name;
}
Nhưng như bạn có thể thấy, mã trở nên khá lặp đi lặp lại
Để tránh phải khai báo
6 trong mỗi hàm, bạn có thể sử dụng biến
7 để thay thếTruy cập các biến toàn cục PHP bằng cách sử dụng mảng $GLOBALS
7 là một mảng kết hợp chứa các tham chiếu đến tất cả các biến toàn cục có sẵn trong tập lệnh PHP của bạnBạn có thể truy cập các biến toàn cục bằng cách chuyển tên biến làm khóa mảng như thế này
$name = "Nathan";
echo $GLOBALS["name"]; // Nathan
Dùng mảng
7 tiện lợi hơn khi cần truy xuất biến toàn cục từ nhiều hàmBạn không cần tham khảo biến bằng cách sử dụng từ khóa
$name = "Nathan";
function greetings[] {
global $name;
echo $name;
}
//👇 prints Nathan
greetings[];
0 trong mỗi chức năng$name = "Nathan";
function nav[] {
echo $GLOBALS["name"];
}
function body[] {
echo $GLOBALS["name"];
}
function footer[] {
echo $GLOBALS["name"];
}
Khi bạn sửa đổi phần tử
7, giá trị biến thực tế cũng sẽ thay đổi$name = "Nathan";
$GLOBALS["name"] = "Jack";
echo $name; // Jack
Và đó là cách bạn truy cập các biến toàn cục bằng cách sử dụng mảng
7Bạn có nên sử dụng biến toàn cục trong PHP không?
Các biến toàn cục có thể giảm số lượng mã bạn cần viết, nhưng nó cũng được coi là cách làm không tốt vì khó gỡ lỗi mã của bạn hơn khi có sự cố xảy ra
Khi bạn đang truy cập một biến cục bộ của hàm, bạn có thể dễ dàng kiểm tra hàm đó để xem bạn có làm gì sai với nó không
Nhưng nếu biến là toàn cục, bạn cần kiểm tra tất cả các dòng nơi bạn gọi biến đó và xem mã có bị sai ở một trong các dòng không
Để kết luận, bạn có thể tự do sử dụng các biến toàn cục trong PHP khi nó hữu ích. Nhưng bạn cũng cần xem xét khó khăn trong việc duy trì và gỡ lỗi các biến toàn cục trong một ứng dụng web phức tạp