PHP基準値と転送との差が渡さ。値によって渡されたときに参照によって渡されたときに
、写真、そして繰り返しバックを先着
値渡し
関数は値関数の範囲外の任意の変更のために無視される
メモリアドレス2つに、コピーの値であり、値が渡された2つの可変ポイントを
値が何も言うことを渡さない、次のように、それは、通常の割り当てであります:
$a = 6;
$b = $a; // 这是值传递,把 $a 的值拷贝给了 $b,在内存中 $a 和 $b 不在一个地址中,更改任意变量的值对对方无影响
$b = 7;
echo $a; // 输出:6
function foo($b){
echo ++$b;
}
foo($b); // 输出:8
echo $b; // 输出:7 说明函数内的改变对函数外的值没有影响,因为,当 $b 传入函数内的时候是值传递,会把值在内存中拷贝一份存入一个新的内存地址中
参照渡し
外部関数の値の変化の関数の範囲はこれらの変更をも反映させることができる
参照が同じメモリアドレスに可変通過内外2つの変数の最終点を識別する変数メモリアドレスに渡される
参照&A
焦点は参照によって渡され
、次のように説明した基準落とし穴を通過します。
$a = 6;
$b = &$a;
$b = 7;
echo $a; // 输出:7
function foo(&$c){
echo ++$c;
}
foo($b); // 输出:8
echo $b; // 输出:8 说明函数内的改变对函数外的值有影响,因为,当 $b 传入函数内的时候是引用传递,函数体内的$b和外部的$b实际上是指向同一个内存地址,所以一个改变,另外一个变量的值也会改变
高度な例は、値が引用しました:
function func(&$arr){
$arr['a'] = [];
$arr = &$arr['a'];
$arr['b'] = '333';
var_dump($arr);
}
$arr = [
'a' => '111',
'b' => '222'
];
func($arr);
var_dump($arr);
/**
# 第一个输出:
array(1) {
["b"]=> string(3) "333"
}
# 第二个输出:
array(2) {
["a"]=> array(1) {
["b"]=> string(3) "333"
}
["b"]=> string(3) "222"
}
*/
上記の例では明らかにまだ2がします、なぜに参照渡し$arr
異なる結果をプリントアウト?
1つのステップがあるため、$arr = &$arr['a'];
関数内で、このステップの後に$arr
変更されたアドレスに、ポインティング$arr['a']
結果は同じ印刷が二度ではないので、
ご注意ください
- PHPはデフォルトの値によって参照されるオブジェクト
- 一般的な参照は、パス、パスのパラメータ値が必要な使用としての機能の本体と外部変数の影響で変更する必要が通過したときに他の値を一般的に使用されています
書き込みPHPにコピーします。
(ポインタと同様)点アドレス機能のためにPHPは、自身が達成するために、ユーザーによるものであるZendのコアによって達成され、PHPであり、原則、「コピーオンライト」を使用する書き込み動作が発生しない限り、同一のアドレスをポイントに引用しました変数やオブジェクトがコピーされません。人気の話
1:次のコードをお持ちの場合$a="ABC"; $b=$a;
実際には、この時間は$と$ bが同じメモリアドレスを指しているではなく、$と$ bが異なるメモリ占有
2:私たちは、次のコードに基づいて上記のコードに追加した場合$a="EFG";
メモリデータで$ $ bが再び書くこと、そしてこの時間は自動的に決定されているので、自動的にZendのコアが$で$ Bのデータのコピー、再適用格納するためのメモリの生産。
CにおけるPHP参照ポインタ差
これは、PHPの手段で引用:別の名前を同じ変数の内容へのアクセスに
差があるC言語のポインタとを。メモリに格納された変数の記憶内容のアドレスであるC言語のポインタ。
PHPの参照を使用すると、(個人名から変数のパスを基準値に相当)と同じ内容を指すように2つの変数を行うことができ
ますが、基準の設定を解除すると、あなただけの変数名と変数の内容の結合を破ります。これは、変数の内容が破壊されることを意味するものではありません。
あなたは、この例の有益な情報を理解することがあります。
1、ポインタとメモリ
2、概略的な1次元メモリアレイの二次元配列
3、10 PHPの開発者は、最も可能性の高いエラーコミットする
4を、値/アドレスと、参照することによりPHP関数値使い方