Một lưu ý quan trọng:
$GLOBALS
bẩn và cái ác. Không sử dụng chúng. Không bao giờ. Không bao giờ.
Hãy tập trung vào thực tế là nó không hoạt động và không lý do tại sao bạn sẽ làm điều này ở nơi đầu tiên, nó hoàn toàn là một câu hỏi lý thuyết về một bài tập kỹ thuật.
Đây là một điều khá lạ. Tôi đang cố gắng xây dựng một biến biến bằng cách sử dụng một chuỗi có tên là $GLOBALS
.
Từ phạm vi toàn cầu
Hãy xem những gì chúng tôi nhận được khi var_dump()
ing này trong phạm vi toàn cầu.
$g = sprintf('%s%s%s%s%s%s%s', chr(71), chr(76), chr(79), chr(66), chr(65), chr(76), chr(83));
var_dump($$g);
Kết quả là một chuỗi các biến toàn cục, bạn có thể xem here. Tuyệt quá! Vì vậy, hãy thử điều này trong một hàm.
Từ một phạm vi chức năng
Đầu tiên, chúng ta hãy chỉ cần đảm bảo rằng chúng tôi thực sự có thể chạy một kiểm tra $GLOBALS
trong một hàm.
function globalAllTheThings()
{
var_dump($GLOBALS);
}
globalAllTheThings();
Kết quả là: nó hoạt động !! Bạn có thể thấy điều này here.
Bây giờ, hãy thử thử nghiệm đầu tiên mà chúng tôi đã sử dụng trong phạm vi toàn cầu, bên trong hàm và xem điều gì xảy ra.
function globalAllTheThings()
{
$g = sprintf('%s%s%s%s%s%s%s', chr(71), chr(76), chr(79), chr(66), chr(65), chr(76), chr(83));
var_dump($$g);
}
globalAllTheThings();
Để đơn giản
Bạn cũng có thể thử mà không obfuscation lạ này (đừng hỏi).
function globalAllTheThings()
{
$g = 'GLOBALS';
var_dump($$g);
}
globalAllTheThings();
Nó trả NULL
. Nó là về cái gì vậy?? Tại sao nó trả lại NULL
và tôi có thể làm gì để làm việc này. Lý do tại sao bạn hỏi? Vì mục đích giáo dục, và cho khoa học!
Vì lợi ích của sự đơn giản, bạn không thể viết '$ g = 'GLOBALS'' thay vì' sprintf-chr' kỳ lạ của bạn? Nó không ảnh hưởng đến kết quả. Nếu nó đã làm, đó sẽ là giá trị một câu hỏi toàn bộ 'nother. – deceze
Vì là PHP. –
Vì '$ {'string'}' tìm biến trong phạm vi đã cho. – Leri