2012-09-19 31 views
7

Khi tôi in $GLOBALS sử dụng mã này:

<?php print_r($GLOBALS); ?> 

tôi nhận được kết quả này:

Array ([_GET] => Array () [_POST] => Array () [_COOKIE] => Array () [_FILES] => Array () [GLOBALS] => Array *RECURSION*)

không *RECURSION* có ý nghĩa gì trong trường hợp này, và tại sao $_SERVER, $_REQUEST, vv không in cũng?

Trả lời

4

Xem this part of PHP Manual:

Hãy ghi nhớ rằng $ GLOBALS là, chính nó, một biến toàn cầu. Vì vậy, mã như thế này sẽ không hoạt động:

<?php 
    print '$GLOBALS = ' . var_export($GLOBALS, true) . "\n"; 
?> 

Điều này dẫn đến thông báo lỗi: "Cấp độ quá sâu - phụ thuộc đệ quy?"

Bạn đã truy xuất toàn bộ danh sách - bạn chỉ không thể hiển thị một phần của danh sách (thẻ có chứa đệ quy, vì bạn sẽ có thời gian chờ thay vì bất kỳ điều gì có ý nghĩa).

Khi nói đến $_REQUEST, nó là một dẫn xuất từ ​​$_GET, $_POST$_COOKIE, vì vậy nội dung của nó là thừa.

EDIT: Có an old bug/feature, mà dường như được Populating $GLOBALS với $_SERVER$_REQUEST khi chúng được truy cập. Vì vậy, hãy thử truy cập $_REQUEST và hy vọng điều đó sẽ hữu ích. Dù sao, nó có thể được tìm thấy trong $GLOBALS sau đó: ideone.com/CGetH

+0

tôi đã xem phần đó ... câu hỏi của tôi là khi xuất của nó cho _POST vv ít nhất trong một lần chạy nó có thể phải xuất bản $ _REQUEST, $ _SERVER? quá – swapnesh

+0

@swapnesh: Có [lỗi/tính năng cũ] (https://bugs.php.net/bug.php?id = 29176), có vẻ như là populating '$ GLOBALS' với' $ _SERVER' và '$ _REQUEST' khi chúng được truy cập. Vì vậy, hãy thử truy cập '$ _REQUEST' và hy vọng nó sẽ giúp ích. Dù sao, nó có thể được tìm thấy trong '$ GLOBALS' sau đó: http://ideone.com/CGetH – Tadeck

+0

thêm này vào câu trả lời của bạn và sau đó tôi sẽ ccaept nó ..thx cho thông tin bro :) – swapnesh

0

Khi bạn có một đối tượng trỏ đến chính nó ... tức là nó chỉ đi trong vòng kết nối.

+0

điều gì về điểm 2,3 :) – swapnesh

2

$GLOBALS chứa chính nó như là một mảng. Trong the PHP reference bạn có thể tìm thấy định nghĩa của $GLOBALS:

Mảng kết hợp chứa tham chiếu đến tất cả các biến hiện được xác định trong phạm vi toàn cục của tập lệnh. Các tên biến là các khóa của mảng.

Do đó, nó cũng phải chứa chính nó, dẫn đến đệ quy.

Các mảng khác có thể chỉ trống, vì không có gì khác xảy ra trong tập lệnh của bạn.

Có một trò đùa cũ về đệ quy: "Để hiểu đệ quy, bạn phải hiểu đệ quy".

BTW: Nó xuất ra _SERVER trên máy tính của tôi.

+1

+1 cho trò đùa cũ :) – swapnesh

+1

Ha ... Tôi vừa phát hiện ra rằng PHP chính nó là một từ viết tắt đệ quy, vì nó đứng cho PHP Hypertext Preprocessor ... không bao giờ nhận thấy trước đây. Có bởi hiệu ứng Wikipedia :-) http://xkcd.com/214/ – ChaosCakeCoder

+0

vâng đúng vậy và thx cho một liên kết hấp dẫn khác :) – swapnesh