😸

static とローカル変数とグローバル変数 PHP

2021/07/22に公開

static とglabalと ローカル変数を割りあてた違いの結果
staticの場合だと初期化が入り、メソッドcheck();がはいるだびに加算処理がされていく。
static $x = 2;だけが有効だった場合

ローカル変数は一度きりの加算 
$x = 2;だけが有効

グローバルの場合だと、functionの外の$x=11が呼び出される (static ローカル変数なし)
関数内の global $x;だけが有効だった場合。

3つとも有効だった場合は、returnの真上の処理が有効になる。

挙動確認は下のコードコピペで、別のシートに書いたphpデバックをインストールして試すと理解がしやすい。
表示、非表示を試すと理解が深まる
デバックの記事
https://zenn.dev/inu328

<?php

$x = 11;
function check(): int
{

static $x = 2;
global $x;
$x = 2;
return ++$x;
}
print check();
print '
';
print check();
print '
';
print $x; //ただの変数11が代入される

// staticの結果 3
4
11
//globalの結果 12 13 13
//ローカル変数の結果 3
3
3

// 関数の中の処理が3とも有効だった場合、returnの前の処理が有効 結果 3
3
3

require_once('acess.php');
で関数部分を切ってよびだしてみても同じ結果になった。
切り取り箇所
function check(): int
{
static $x = 2;
global $x;
$x = 2;
return ++$x;
}

Discussion