ホームページ  >  記事  >  バックエンド開発  >  PHP 変数のスコープとアドレス参照の問題に関する簡単な説明_PHP チュートリアル

PHP 変数のスコープとアドレス参照の問題に関する簡単な説明_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:18:351022ブラウズ

スコープの概念:

変数は PHP スクリプト内のどこでも宣言できますが、変数がどこで宣言されるかは、変数へのアクセス範囲に大きく影響します。このアクセス可能な範囲をスコープと呼びます。

主によく使用されるものには、ローカル変数、グローバル変数、静的変数が含まれます。

1. ローカル変数: 関数内で宣言された変数であり、メモリスタックに格納されるため、アクセス速度が非常に高速です。関数内でのみ有効です。

2. グローバル変数: ローカル変数とは異なり、グローバル変数はプログラム内のどこからでもアクセスできます。キーワード GLOBAL を変数の前に追加すれば、グローバル変数として認識できます。 php ファイル全体で有効です。

3. 静的変数: 関数のスコープ内にのみ存在する変数を変更するには、関数の実行後に値が消えません。注: 初期化後に再度初期化することはできず、式を使用して値を割り当てることもできません。

コードをコピーします コードは次のとおりです:

function test()
{
static $b=0;//関数の外で宣言された場合、静的変数は関数内では使用されません。関数

$b=$b+1;

echo $b;

}
test();//このステートメントは $b の値を 1 として出力します
test();//このステートメントは $b の値を 2 として出力します

注: static $b=0 この代入操作は、変数が初めて初期化されるときにのみ実行されます。

添付ファイル A: クラス内の静的メンバーと静的メソッドは、ほとんどの場合、呼び出し時にクラス名または self または親に :xxx を加えたものを使用しますが、その宣言はメソッドの外にあります

添付 B: js のスコープは次のとおりです: use var aa=‘xxx’; 関数の外で宣言されるものはグローバル変数です (修飾子 var の有無に関係なく)。ローカル変数は関数内で var を使用して宣言され、グローバル変数は var を使用せずに宣言されます。

添付C:引用について

PHP リファレンス: & を追加します。php での変数、関数、またはオブジェクトの前の参照は、異なる名前で同じ変数の内容にアクセスすることです。

1. 変数参照:

コードをコピーします コードは次のとおりです:
$a="ABC";
$b =&$a; echo $a // ここに出力: ABC

echo $b //ここに出力: ABC

$b="EFG";

echo $a;//ここでの$aの値がEFGとなるのでEFGを出力します

echo $b;//ここにEFGを出力します

2. アドレスによる関数呼び出し

コードをコピーします

コードは次のとおりです:function test(&$a)
{

$a=$a+100; }

$b=1;

echo $b;//出力 1

test($b); //ここで関数に渡される $b は、実際には $b の変数の内容が配置されているメモリ アドレスです。関数内の $a の値を変更することで、$b の値を変更できます。変わる

エコー "
";

echo $b;//出力 101

3. 関数参照の戻り


コードをコピー

コードは次のとおりです:

function &test() { static $b=0;//静的変数を宣言する
$b=$b+1;
エコー $b

$b を返す

}

$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)

エコー$b;

分析: 参照の設定を解除すると、変数名と変数の内容の間のバインディングがキャンセルされるだけで、内容が破棄され、その値がまだ存在するという意味ではありません。

5. グローバル参照: global $var を使用して変数を宣言すると、実際にはグローバル変数への参照が作成されます。グローバル $val <=> $var=&$GLOBALS[‘var’] ;

6. オブジェクト参照: オブジェクトメソッドでは、$this によって呼び出されるオブジェクトがそれを呼び出す参照です

注意: PHP でのアドレスの指定はユーザー自身によって実装されるのではなく、zend コアを通じて PHP 参照は「書き込みコピー」の原則を採用します。つまり、書き込み操作が発生しない限り、変数は同じアドレスを指します。そうでない場合、オブジェクトはコピーされません。

コードをコピー コードは次のとおりです:

$a = 1; $b =$a;


$a と $b は両方とも同じメモリ アドレスを指しますが、$a と $b が異なるメモリを占有するわけではありません。
ここで $a="dsd" という文を実行すると、$a と $b が指すメモリ データを書き換える必要があり、この時点で zend コアが自動的に判断します。 $b 用の $a のデータ コピーを自動的に生成し、ストレージ用のメモリを再適用します。

http://www.bkjia.com/PHPjc/621647.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/621647.html技術記事スコープの概念: 変数は PHP スクリプト内のどこでも宣言できますが、変数が宣言される場所は、変数へのアクセスのスコープに大きく影響します。このアクセス可能な範囲をスコープと呼びます...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。