1
0

【PHP】スーパーグローバル変数$GLOBALS

Posted at

$GLOBALSとは

$GLOBALSとは、PHPの定義済み変数のひとつで、グローバルスコープで使用可能な全ての変数への参照を含む配列となっています。

つまり、関数の中でグローバル変数を参照したい場合に$GLOBALSを使用します。

ローカル変数:関数の中で定義され、関数の中でのみ生存
グローバル変数:関数の外で定義され、関数の外でのみ生存

サンプル

  • $GLOBALSは、キーにグローバル変数名を指定してあげることで変数を参照できる。
例1
<?php

// グローバル変数
$global_number = 'グローバルな数字です';
$global_name = 'グローバルな名前です';

function test1_func() {
    // ローカル変数 (未定義のためエラー)
    echo $global_number;
    echo $global_name;

    // 関数内でグローバル変数を取得
    echo $GLOBALS['global_number'];
    echo $GLOBALS['global_name'];
}
test_func();

実行結果
グローバルな数字です
グローバルな名前です

  • $GLOBALSは、配列が格納されている場合も添字を続けて指定することで参照できる。
例2
<?php

// グローバル変数
$name = ['sato', 'tanaka', 'yamada'];
$birthday = [
    ['1980/01/01', '1980/04/01', '1980/07/01'],
    ['1990/02/01', '1990/05/01', '1990/08/01'],
    ['2000/03/01', '2000/06/01', '2000/09/01']
];
$gender = [
    'sato' => 'man',
    'tanaka' => 'woman',
    'yamada' => 'man'
];

function test2_func() {
    // 関数内でグローバル変数を取得
    echo $GLOBALS['name'][2];
    echo $GLOBALS['birthday'][2][0];
    echo $GLOBALS['gender']['yamada'];
}
test2_func();

実行結果
yamada
2000/03/01
man

  • $GLOBALSは、変数にオブジェクトが格納されている場合は、アロー演算子「->」を利用することでプロパティやメソッドを参照できる。
例3
<?php

class User {

    public $name;
    public $age;

    public function __construct($name, $age) {
        $this->name = $name;
        $this->age = $age;
    }

    public function view() {
        echo "名前は{$this->name}です<br>";
        echo "年齢は{$this->age}歳です<br>";
    }
}

$user = new User('tanaka', 25);

function test3_func() {
    // 関数内でインスタンスプロパティの取得
    echo $GLOBALS['user']->name."<br>";

    echo $GLOBALS['user']->view();
}
test3_func();

実行結果
tanaka
名前はtanakaです
年齢は25歳です

  • $GLOBALSを利用してグローバル変数の値を設定することもできる。
例4

<?php

class User {

    public $name;
    public $age;

    public function __construct($name, $age) {
        $this->name = $name;
        $this->age = $age;
    }

    public function view() {
        echo "名前は{$this->name}です<br>";
        echo "年齢は{$this->age}歳です<br>";
    }
}

// グローバル変数
$number = 100;
$array = [1,2,3,4,5];
$user = new User('tanaka', 25);

function test4_func() {
    // キーにグローバル変数を指定し値を設定
    $GLOBALS['number'] = 200;

    // 配列の場合はグローバル変数と添字を指定し値を設定
    $GLOBALS['array'][4] = 55;

    // アロー演算子を利用してインスタンスプロパティの値を設定
    $GLOBALS['user']->name = 'sato';
    $GLOBALS['user']->age = 40;
}
test4_func();

echo $number."<br>";
echo $array[4]."<br>";
$user->view();

実行結果
200
55
名前はsatoです
年齢は40歳です

注意
「$GLOBALS」と「global」は関数内でグローバル変数を参照できる点は一緒だが
グローバル変数の参照方法が異なるので違いに注意

$GLOBALSはスーパーグローバル変数です(定義済みの変数)。
globalキーワードは、あくまでもその関数内で使うその変数のスコープをグローバルにするというだけのものです。
(その変数自体がスクリプト全体に対してグローバルになるわけではありません)

参考


著者: E.R (株式会社ウィズツーワン)
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0