ホームページ  >  記事  >  バックエンド開発  >  PHPでの参照渡しと値渡しの違い

PHPでの参照渡しと値渡しの違い

王林
王林オリジナル
2019-09-16 11:59:413449ブラウズ

PHPでの参照渡しと値渡しの違い

値による受け渡し

関数のスコープ内での値の変更は関数の外では無視されます。値による受け渡しでは、 value. 、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 = 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 が異なる結果を出力するのでしょうか?
ステップ操作 $arr = &$arr['a']; があるため、このステップの後、関数内の $arr の指すアドレスが変更され、$arr['a'] を指すようになりました。 2 つの印刷物はどれも同じではありません。

注: PHP のオブジェクトのデフォルトの値渡しは、通常、関数本体内で渡すパラメーターを変更する必要がある場合や、外部変数に影響を与える必要がある場合に使用されます。は通常、他のときに使用されます。

推奨チュートリアル: PHP ビデオ チュートリアル

以上がPHPでの参照渡しと値渡しの違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。