参照アンパサンドを使用するにはどうすればよいですか? PHPとシンボルの使用例を詳しく解説

伊谢尔伦
リリース: 2023-03-10 22:16:02
オリジナル
2299 人が閲覧しました

PHP引用とは何ですか? PHP

の意味は、異なる名前が同じ variablecontent にアクセスすることです (つまり、変数または関数、object の前にアンパサンドを追加します)。など)。以下で説明してみましょう:

1. 変数参照

PHP Reference を使用すると、2 つの変数を使用して同じコンテンツを指すことができます

例 1:

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

例 2:

<?php
$a = "date";
$b = &$a;
echo $a; // date
echo $b; // date
$b = "date1";
echo $a; // date1
echo $b; // date1
unset($a);
echo $b; // date1
?>
ログイン後にコピー

上記の 2 つの例から、$b のメモリ アドレスを $b に与えるのは単純な代入ではないことがわかります。したがって、$b

に対する操作は、$a

にも影響します。別の言い方としては、$a が削除されると、エイリアス $b が追加されます。この変数の名前を変更しても、変数の内容は削除されません。エイリアスを使用してこの変数の内容を表示することもできます。 (図に示すように)

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

例 3:

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

ここで行う方法

test(

);アドレスの受け渡しがありません。

3. 関数参照の戻り値 php引用符号详解 - 蓝色花絮 - 永远的2009

関数参照の戻り値は主にオブジェクト内で使用されます。 ここで理解するのは簡単です 例として

静的

変数を使用します 例 4:

<?php
function &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
$a=5;
$a=test();//这条语句会输出 $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; になります。 例 5:

<?php
class 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=new a; $c=&$b;

PHP5中默认就是通过引用来调用对象, 但有时你可能想建立一个对象的副本,并希望原来的对象的改变不影响到副本。 为了这样的目的,PHP定义了一个特殊的方法,称为clone

5. 引用的作用

如果程序比较大,引用同一个对象的变量比较多,并且希望用完 该对象后手工清除它,建议用 "&" 方式,然后用$var=null的方式清除。其它时候还是用php5的默认方式吧.

另外, php5中对于大数组的传递,建议用 "&" 方式, 毕竟节省内存空间使用。

6. 取消引用

当你 unset 一个引用,只是断开了变量名和变量内容之间的绑定。这并不意味着变量内容被销毁了。

例如:

 <?php
$a = 1;
$b =& $a;
unset ($a);
?>
ログイン後にコピー

不会 unset $b,只是 $a

可以参看变量的引用那段

7. global 引用

当用 global $var 声明一个变量时实际上建立了一个到全局变量的引用。

它等价于下面这段代码:

<?php
$var =& $GLOBALS["var"];
?>
ログイン後にコピー

 这意味着,例如,unset $var 不会 unset 全局变量。 

8. $this

在一个对象的方法中,$this 永远是调用它的对象的引用。 

另外说明

php中对于地址的指向(类似指针)功能不是由用户自己来实现的,是由Zend核心实现的,php中引用 采用的是写时拷贝的原理,就是除非发生写操作,才会拷贝,其他操作,指向同一个地址的变量或者对象是不会被拷贝的。

假如,有以下代码:

$a="ABC"; 
$b=$a;

このとき、$a$bが異なるメモリを占有するのではなく、$a$bは両方とも同じメモリアドレスを指しています

上記のコードに追加すると次のようになります以下のコードです

​​

$a="EFG";

ここで「書き込み」操作が実行されます

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

以上が参照アンパサンドを使用するにはどうすればよいですか? PHPとシンボルの使用例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!