ホームページ >バックエンド開発 >PHPチュートリアル >PHP 変数のスコープとアドレス参照の問題に関する簡単な説明_PHP チュートリアル
スコープの概念:
変数は PHP スクリプト内のどこでも宣言できますが、変数がどこで宣言されるかは、変数へのアクセス範囲に大きく影響します。このアクセス可能な範囲をスコープと呼びます。
主によく使用されるものには、ローカル変数、グローバル変数、静的変数が含まれます。
1. ローカル変数: 関数内で宣言された変数であり、メモリスタックに格納されるため、アクセス速度が非常に高速です。関数内でのみ有効です。
2. グローバル変数: ローカル変数とは異なり、グローバル変数はプログラム内のどこからでもアクセスできます。キーワード GLOBAL を変数の前に追加すれば、グローバル変数として認識できます。 php ファイル全体で有効です。
3. 静的変数: 関数のスコープ内にのみ存在する変数を変更するには、関数の実行後に値が消えません。注: 初期化後に再度初期化することはできず、式を使用して値を割り当てることもできません。
$b=$b+1;
echo $b;}
test();//このステートメントは $b の値を 1 として出力します
test();//このステートメントは $b の値を 2 として出力します
添付ファイル A: クラス内の静的メンバーと静的メソッドは、ほとんどの場合、呼び出し時にクラス名または self または親に :xxx を加えたものを使用しますが、その宣言はメソッドの外にあります
。
添付 B: js のスコープは次のとおりです: use var aa=‘xxx’; 関数の外で宣言されるものはグローバル変数です (修飾子 var の有無に関係なく)。ローカル変数は関数内で var を使用して宣言され、グローバル変数は var を使用せずに宣言されます。添付C:引用について
PHP リファレンス: & を追加します。php での変数、関数、またはオブジェクトの前の参照は、異なる名前で同じ変数の内容にアクセスすることです。
1. 変数参照:
echo $b //ここに出力: ABC
$b="EFG";
echo $a;//ここでの$aの値がEFGとなるのでEFGを出力します
echo $b;//ここにEFGを出力します
2. アドレスによる関数呼び出し
$b=1;
echo $b;//出力 1
test($b); //ここで関数に渡される $b は、実際には $b の変数の内容が配置されているメモリ アドレスです。関数内の $a の値を変更することで、$b の値を変更できます。変わる
エコー "
";
3. 関数参照の戻り
コードは次のとおりです:
}
$a=test();//このステートメントは、$b の値が 1 であることを出力します
$a=5;
$a=test();//このステートメントは、$b の値が 2 であることを出力します$a=&test();//このステートメントは $b の値を 3 として出力します
$a=5;
$a=test();//このステートメントは、$b の値が 6 であることを出力します
分析: $a=test() を使用して得られるものは、実際には関数からの参照戻りではありません。 $b には影響せずに、関数の戻り値を $a にコピーするだけです。この通話は通常の通話と変わりません。
Php は次のように規定しています: $a=&test() メソッドは関数の参照戻り値です。彼は、$b 変数のメモリ アドレスと $a 変数のメモリ アドレスが同じ場所を指しました。これは $a=&$b;
と同等です4. 参照をキャンセルします
$a = 1;
$b =& $a;設定解除 ($a)
分析: 参照の設定を解除すると、変数名と変数の内容の間のバインディングがキャンセルされるだけで、内容が破棄され、その値がまだ存在するという意味ではありません。
5. グローバル参照: global $var を使用して変数を宣言すると、実際にはグローバル変数への参照が作成されます。グローバル $val <=> $var=&$GLOBALS[‘var’] ;
6. オブジェクト参照: オブジェクトメソッドでは、$this によって呼び出されるオブジェクトがそれを呼び出す参照です
注意: PHP でのアドレスの指定はユーザー自身によって実装されるのではなく、zend コアを通じて PHP 参照は「書き込みコピー」の原則を採用します。つまり、書き込み操作が発生しない限り、変数は同じアドレスを指します。そうでない場合、オブジェクトはコピーされません。