Last 5.3 release ever available: PHP 5.3.29 - 5.3 now EOL

スーパーグローバル

スーパーグローバルすべてのスコープで使用できる組み込みの変数

説明

PHP の定義済み変数の中には "スーパーグローバル" というものがあります。 これは、スクリプト全体を通してすべてのスコープで使用可能な変数のことです。 関数やメソッドの内部からアクセスする際にも global $variable; などとする必要はありません。

スーパーグローバルには次のようなものがあります。

変更履歴

バージョン 説明
4.1.0 スーパーグローバルが PHP に導入されました。

注意

注意: 使用できる変数

デフォルトでは、すべてのスーパーグローバルが使用可能です。 ただし、それに影響を与える設定項目もあります。詳細は variables_order のドキュメントを参照ください。

注意: register_globals の扱い

非推奨の register_globals ディレクティブが on に設定されている場合は、 内部の変数もスクリプトのグローバルスコープで使用できるようになります。 たとえば $_POST['foo']$foo という名前でも使えるようになるということです。

関連情報については、FAQ の "register_globals の影響は?" を参照ください。

注意: 可変変数

スーパーグローバルは、関数やクラスメソッドの中の 可変変数 として使用することはできません。

add a note add a note

User Contributed Notes 4 notes

up
2
kitchin
1 year ago
Since PHP 5.4, you cannot use a superglobal as the parameter to a function. This causes a fatal error:

function foo($_GET) {
  // whatever
}

It's called "shadowing" a superglobal, and I don't know why people ever did it, but I've seen it out there. The easy fix is just to rename the variable $get in the function, assuming that name is unique.

There was no deprecation warning issued in previous versions of PHP, according to my testing, neither in 5.3 nor 5.2. The error messages in 5.4 are:
Fatal error: Cannot re-assign auto-global variable _GET in...
Fatal error: Cannot re-assign auto-global variable _COOKIE in...
etc.
up
0
John Slegers
9 months ago
Want to know how to generate a formatted list with all globals (including custom ones)? Check out the code below.

<?php
// Generate a formatted list with all globals
//----------------------------------------------------
// Custom global variable $_CUSTOM
$_CUSTOM = array('USERNAME' => 'john', 'USERID' => '18068416846');

// List here whichever globals you want to print
// This could be your own custom globals
$globals = array(
   
'$_SERVER' => $_SERVER, '$_ENV' => $_ENV,
   
'$_REQUEST' => $_REQUEST, '$_GET' => $_GET,
   
'$_POST' => $_POST, '$_COOKIE' => $_COOKIE,
   
'$_FILES' => $_FILES, '$_CUSTOM' => $_CUSTOM
);
?>
<html>
    <style>
        <?php // Adjust CSS formatting for your output  ?>
        .left {
            font-weight: 700;
        }
        .right {
            font-weight: 700;
            color: #009;
        }
        .key {
            color: #d00;
            font-style: italic;
        }
    </style>
    <body>
        <?php
       
// Generate the output
       
echo '<h1>Superglobals</h1>';
        foreach (
$globals as $globalkey => $global) {
            echo
'<h3>' . $globalkey . '</h3>';
            foreach (
$global as $key => $value) {
                echo
'<span class="left">' . $globalkey . '[<span class="key">\'' . $key . '\'</span>]</span> = <span class="right">' . $value . '</span><br />';
            }
        }
       
?>
    </body>
</html>
up
-1
lskatz at gmail dot com
5 years ago
Tibor:
It's not a good idea to use $_ENV unless you are specifying an environmental variable.  This is probably a better example that I found on another page in php.net

<?php
function test() {
   
$foo = "local variable";

    echo
'$foo in global scope: ' . $GLOBALS["foo"] . "\n";
    echo
'$foo in current scope: ' . $foo . "\n";
}

$foo = "Example content";
test();
?>
up
-22
serpent at paradise dot net dot nz
2 years ago
You can go the other way as well i.e.

<?php
function test() {
       
$GLOBALS['foo'] = "Example content";
}

test();
echo
"<p>$foo</p>";
?>

This doesn't appear to be affected by register_globals, I have it switched off.
To Top