PHPリファレンスとシンボルの詳しい説明
php (つまり、変数、関数、オブジェクトの前に & 記号)
PHP で引用されている は、異なる名前が同じ変数内容 にアクセスすることを意味します。 🎜>
?変数参照
PHP
の参照により、2 つの変数を使用して同じコンテンツ を指すことができます。 例 1:
$a="2010";
$b =&$a;
echo $a;//
ここに出力:2010
echo $b;//ここに出力:2010
$b="2012";echo $a;//
ここで、$a の値は < になります。 🎜>2012 なので、出力は になります。 echo $b;//
ここに出力2012 ?>
例 2:
$a = "日付";
$b = &$a;
echo $a // 日付
echo $b; // 日付
$b = "date1";
echo $a // date1
echo $b; // date1
unset($a);
echo $b; // date1
?>
上の 2 つの例から、
$b のメモリアドレスが に与えられていることがわかります。 $b は単純な代入ではありません。 $b の場合 の操作はすべて
$a にも影響します 別の言い方は、
$a $b<🎜 のエイリアスを追加することです。 > 、$a を削除すると、変数の名前のみが削除され、変数の内容は削除されませんエイリアスは引き続き使用できます。 この変数の内容を表示します。 (写真の通り) ???????
関数の参照渡し呼び出し
例 3:
機能テスト(&$a)
{
$a=$a+100;
}
$b=1;
echo $b;//
出力 1 //
ここで$b が実際には関数 に渡されます。 $bの変数内容のメモリアドレスは、関数 >$b の値を の値に変更できます test($b);???
echo $b;//出力101
?> ここでの実行方法
test(1
);それはうまくいかないでしょう ??? パラメータは変数のみであり、定数にはアドレスの受け渡しができないという説明。 ?
関数参照は
を返します
関数から返される参照は主にオブジェクトで使用されます。ここでは理解しやすいです例として静的変数を使用します例 4:
関数 &test() { ????static $b=0;//静的変数を宣言します ????$b=$b+1; ????echo $b; ????return $b; } //このステートメントは、$b の値が 1< であることを出力します。 🎜>
$a=test();
$a=5;
$a=test();//このステートメントは、$b< を出力します。 🎜> の値は 2 です
?
$a=&test();//このステートメントは、$b< を出力します。 🎜> の値は 3 です
このステートメントは、$b< を出力します。 🎜> の値は 6 です
この関数は値を出力し、返していることに注意してください。 $a = test() ; 関数 test の戻り値を変更するだけです。 > $b は $a に割り当てられています。これはごく普通のことです代入。関数参照の戻りではありません。したがって、$aどのような操作を行っても、$b< には影響しません。 🎜> 。
$a = &test(); は、 を $b< に変換することで機能します。 🎜 > のメモリ アドレスは、$a のメモリ アドレスと同じ場所を指しており、< と同様のものが生成されます。 🎜> $b = &$a、$a の値が変化すると < になります。 🎜 >5 は $b の値にも影響します。したがって、 $a = &test(); $a = 5; を実行すると、$b = 5があり、関数処理後の出力は $b = 6 ;
?>
?
オブジェクトの参照
クラス a{
var $abc="ABC";
}
$b=new a;
$c=$b;
echo $b->abc;//ここに出力 ABC
echo $c->abc;//ここに出力 ABC
$b->abc="DEF";
echo $c->abc;//ここに出力 DEF
?>
PHP5 PHP5 で実行した結果です。 内の オブジェクトのコピーは参照を通じて行われます。
上記のリストでは、$b=new a; $c=$b; $b=新しい a; PHP5デフォルトでは、参照によってオブジェクトを呼び出します。しかし、オブジェクトのコピーを作成して、元のオブジェクト 変更はコピーには影響しません。 そのような目的のために、PHP は __clone。
?
引用の役割
プログラムが比較的大きい場合、同じオブジェクトを参照する変数が多数ある 、 、の後のオブジェクトを手動でクリアしたい場合は、"&" 方式、 を使用し、$var=null でクリアする方法です。それ以外の場合は、デフォルトのメソッド php5. を使用します。
、php5 での大きな配列の転送用、"&"メソッド、を使用することをお勧めします結局のところ、メモリスペースが節約されます。
?
引用解除
設定解除すると、変数名と変数の内容の間のバインドが解除されるだけです。これは、変数の内容が破壊されることを意味するものではありません。
?
$a = 1;
$b =& $a;
設定解除 ($a);
?>??
$b の設定は解除されません。$a。
変数参照セクションを参照できます
?グローバル 引用
global $var で変数を宣言すると、実際にはグローバル変数への参照が作成されます。
これは次のコードと同等です:
これは、たとえば、unset $var はグローバル変数の設定を解除します。
?
$this
オブジェクトのメソッド内で、 $this は常に、それを呼び出すオブジェクトへの参照です。
内のアドレスのポインティング (ポインタに似た) 関数は、ユーザー自身によって実装されるのではなく、 によって実装されます。 Zend コア実装、php は で を使用します"書き込み時にコピー" の原理は、書き込み操作が発生しない限り、他のものに対してコピーされるということです。操作では、同じアドレスにある変数またはオブジェクトをポイントする場合はコピーされません。
次のコードがあるとします:
$b=$a; 追伸: 個人的には $b = &$a であるべきだと思います、$a と $b が同じメモリアドレスですが、私が参照した情報にはそう書かれています。&については、現時点ではよくわかりません。もし異なる意見を持つ友人がいたら、教えてください。取り上げていただきありがとうございます この時点では、$a と $b これらはすべて同じメモリ アドレスを指しており、$a や $b別のメモリを占有します
?
上記のコードに追加すると、次のコード
$a="EFG";
「書き込み」操作はここで実行されます
$a と $b が指すメモリ内のデータを書き換える必要があるため、今回は Zend コアが $a を $b に対して自動的に決定し、自動的に生成します。 データをコピーし、ストレージ用のメモリを再適用します。