PHPには値渡しと参照渡しが存在します。後者では、変数を識別するためにアドレス文字 & を使用する必要があります。代入演算の使用例は次のとおりです:
1.価値の移転
1) 基本的なデータ型:
01
02
$a = 1;
03
$b = $a;
04
$b += 2;
05
06
echo "$a = ".$a."
";
07
echo "$b = ".$b."
";
08
09
/* 出力:
10
$a = 1
11
$b = 3
12
*/
13
?>
注: ここでは $b = $a ステートメントを使用して、$a の値を $b に割り当てます。 つまり、この時点で割り当てられる値は 1 です。
ステートメント $b += 2 の実行後:
したがって、$b は 3 になりますが、$a の値は変わりません。
2) 参照データ型
人物クラスは次のとおりです:
01
クラス人 {
02
プライベート $_name;
03
04
パブリック関数 setName($name) {
05
$this->_name = $name;
06
}
07
08
パブリック関数 getName() {
09
return $this->_name;
10
}
11
12
パブリック関数 toString() {
13
return "名前は ".$this->_name;
14
}
15
}
2 つの Person クラス オブジェクトを初期化し、プロパティを設定します。
1
$p1 = 新しい人();
2
$p1->setName("person1");
3
$p2 = 新しい人();
4
$p2->setName("person2");
次のことを実行します:
1
$p3 = $p1;
テスト:
1
echo "$p1 の ".$p1->toString().".
";
2
echo "$p3 の ".$p3->toString().".
";
3
4
/* 出力:
5
$p1 の名前は person1 です。
6
$p3 の名前は person1 です。
7
*/
注: ステートメント $p3 = $p1 の場合、この時点で割り当てられる値は 0x000a です。つまり、$p1 と $p3 は両方とも同じオブジェクトを参照します。
2. 参照によるパス
1) 基本的なデータ型
01
02
$a = 1;
03
$b = &$a;
04
$b += 2;
05
06
echo "$a = ".$a."
";
07
echo "$b = ".$b."
";
08
09
/* 出力:
10
$a = 3
11
$b = 3
12
*/
13
?>
注: ここでは $b = &$a ステートメントを使用して参照渡しを行っています。つまり、この時点で割り当てられる値は 0x0001 です。
$b += 2 の後、
つまり、$a と $b の値は両方とも 3 です。
2) 参照データ型
前の$p3 = $p1を置き換えるために次の操作が実行された場合
1
$p3 = &$p1;
次に、次の操作を行います:
1
$p3 = $p2;
テスト結果は次のとおりです:
1
echo "$p1 の ".$p1->toString().".
";
2
echo "$p3 の ".$p3->toString().".
";
3
4
/* 出力:
5
$p1 の名前は person2 です。
6
$p3 の名前は person2 です。
7
*/
注: $p3 = $p2 ステートメントが実行されたため、$p3 の結果情報が出力されたことは明らかですが、$p1 の結果情報が以前と異なるのはなぜですか?
これは、$p3 = &$p1 ステートメントが実行された後、このときに割り当てられる値が 0x0001 であるためです。
$p3 = $p2 ステートメント実行直後
そのため、上記の結果情報が出力されます。これは、アドレス文字 & が機能しているためです。
完全なコードは次のとおりです:
1) 参照データ型
01
02
クラス人 {
03
プライベート $_name;
04
05
パブリック関数 setName($name) {
06
$this->_name = $name;
07
}
08
09
パブリック関数 getName() {
10
return $this->_name;
11
}
12
13
パブリック関数 toString() {
14
return "名前は ".$this->_name;
15
}
16
}
17
18
$p1 = 新しい人();
19
$p1->setName("person1");
20
$p2 = 新しい人();
21
$p2->setName("person2");
22
23
$p3 = $p1;
24
// $p3 = &$p1;
25
// $p3 = $p2;
26
echo "$p1 の ".$p1->toString().".
";
27
echo "$p3 の ".$p3->toString().".
";
28
?>
2) 基本的なデータ型
1
2
$a = 1;
3
$b = $a;
4
// $b = &$a;
5
$b += 2;
6
7
echo "$a = ".$a."
";
8
echo "$b = ".$b."
";
9
?>
結論: 値の転送と参照の転送は、メソッド/関数のパラメーターを渡すときの代入操作に似ています。