php リファレンス (&) の使用法

韦小宝
リリース: 2023-03-17 16:28:01
オリジナル
1936 人が閲覧しました

PHP で引用されている意味は、異なる名前が同じ変数の内容にアクセスすることです。 PHPC言語のポインタには違いがあります。 C言語におけるポインタは、メモリ上で変数の内容を格納するアドレスを格納します。 php を見てみましょう引用符 (&) の使用法

変数リファレンスPHP のリファレンスでは、2 つの変数を使用して同じコンテンツを指すことができます。

<?php
$a="ABC";
$b =&$a;
echo $a;//这里输出:ABC
echo $b;//这里输出:ABC
$b="EFG";
echo $a;//这里$a的值变为EFG 所以输出EFG
echo $b;//这里输出EFG
?>
ログイン後にコピー

参照による呼び出し関数

参照による呼び出し関数の詳細については説明しません。コードはすぐ下にあります。

function test(&$a)
{
$a=$a+100;
}
$b=1;
echo $b;//输出1
test($b); //这里$b传递给函数的其实是$b的变量内容所处的内存地址,通过在函数里改变$a的值 就可以改变$b的值了
echo "<br>";
echo $b;//输出101
ログイン後にコピー

ここでtest(1);するとエラーになるので注意してください

関数の参照戻り
まずはコードを見てください

function &test()
{
static $b=0;//申明一个静态变量
$b=$b+1;
echo $b;
return $b;
}
$a=test();//这条语句会输出 $b的值 为1
$a=5;
$a=test();//这条语句会输出 $b的值 为2
$a=&test();//这条语句会输出 $b的值 为3
$a=5;
$a=test();//这条语句会输出 $b的值 为6
ログイン後にコピー

以下のように説明します: $a=test( ); 実際に得られるものは関数参照の戻り値ではなく、通常の関数呼び出しと何ら変わりません。これはPHPの規定です

PHPでは$a=で得られるものと規定されています。 &test(); は関数の参照 return です
参照リターンとは何ですか? (PHP マニュアルには、参照をバインドする必要がある関数を使用する場合に参照リターンが使用されます)。長い間理解できませんでした
上の例を使って説明してください
$a=test() で関数を呼び出すと、関数の値が $a に代入されるだけで、$a を変更しても $ には影響しません関数内の b
そして $a=&test() で関数を呼び出します。その機能は、$b を返す $b 変数のメモリ アドレスと、$a 変数のメモリ アドレスを同じ場所に指すことです。これと同等の効果が得られます($a=&b;) そこで、$aを変更します $bの値も$bの値を変更しますので、

$a=&test();
$a=5;
ログイン後にコピー

を実行すると、$bの値は5になります
これは、静的変数を使用する前に関数の参照戻り値について理解してください。実際、関数の参照戻り値は

Object


での実行効果です。PHP5 では、オブジェクトのコピーは参照を通じて行われます。上記の列の $b=new a; $c=$b; は、実際には $b=new a; $c=&$b; と同等です
PHP5 のデフォルトでは、オブジェクトを参照によって呼び出すことができます。オブジェクトのコピーを作成し、元のオブジェクトへの変更がコピーに影響しないことを望みます。この目的のために、PHP はクローンと呼ばれる特別なメソッドを定義します。プログラムが比較的大きい場合は、比較します。同じオブジェクトを参照する変数 使用後にオブジェクトを手動でクリアしたい場合は、「&」メソッドを使用してから、$var=null を使用してオブジェクトをクリアすることをお勧めします。それ以外の場合は、php5 のデフォルトのメソッドを使用します。さらに、php5 の大きな配列の場合は、メモリ領域を節約できるため、「&」メソッドを使用して転送することをお勧めします。

参照解除
参照の設定を解除すると、
変数名
と変数の内容の間のバインドが解除されるだけです。これは、変数の内容が破壊されることを意味するものではありません。例:

<?php
$a = 1;
$b =& $a;
unset ($a);
?>
ログイン後にコピー
は $b の設定を解除せず、$a のみを設定解除します。

グローバル参照

global $var で変数を宣言すると、実際にはグローバル変数への参照が作成されます。これは、これを実行するのと同じです:

<?php
$var =& $GLOBALS["var"];
?>
ログイン後にコピー
これは、たとえば、unset $var ではグローバル変数の設定が解除されないことを意味します。

$this
ログイン後にコピー

オブジェクトのメソッドでは、$this は常にそれを呼び出すオブジェクトへの参照になります。


//ここでまたちょっとしたエピソードです

​​ PHP におけるアドレスのポインティング (ポインタに似た) 関数は、ユーザー自身によって実装されるのではなく、Zend コアによって実装されます。PHP における参照は、「コピー」の原則を採用しています。 on-write" 、つまり、書き込み操作が発生しない限り、同じアドレスを指す変数またはオブジェクトはコピーされません。
わかりやすく言うと

1: 次のコードがあるとします


$a="ABC";
$b=$a;
ログイン後にコピー

実際、この時点では $a と $b は同じメモリ アドレスを指しており、$a と $b が異なるメモリを占有しているわけではありません

2:上記のコードに、以下のコードを追加します


$a="EFG";
ログイン後にコピー



$aと$bが指すメモリ内のデータを書き換える必要があるため、この時Zendコアが自動判断して自動生成します$a のデータを $b にコピーし、ストレージ用にメモリを再適用します。


関連する推奨事項:


PHP のいくつかの一般的なセッション関数

PHP の 0 と null の違い

最も完全な PHP 文字列処理関数

以上がphp リファレンス (&) の使用法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート