😸
static とローカル変数とグローバル変数 PHP
static とglabalと ローカル変数を割りあてた違いの結果
staticの場合だと初期化が入り、メソッドcheck();がはいるだびに加算処理がされていく。
static $x = 2;だけが有効だった場合
ローカル変数は一度きりの加算
$x = 2;だけが有効
グローバルの場合だと、functionの外の$x=11が呼び出される (static ローカル変数なし)
関数内の global $x;だけが有効だった場合。
3つとも有効だった場合は、returnの真上の処理が有効になる。
挙動確認は下のコードコピペで、別のシートに書いたphpデバックをインストールして試すと理解がしやすい。
表示、非表示を試すと理解が深まる
デバックの記事
<?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