ホームページ > バックエンド開発 > PHPチュートリアル > PHP_PHP チュートリアルの値渡しと参照渡し

PHP_PHP チュートリアルの値渡しと参照渡し

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2016-07-13 17:53:12
オリジナル
995 人が閲覧しました

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 です。
PHP_PHP チュートリアルの値渡しと参照渡し
ステートメント $b += 2 の実行後:
PHP_PHP チュートリアルの値渡しと参照渡し
したがって、$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 は両方とも同じオブジェクトを参照します。
PHP_PHP チュートリアルの値渡しと参照渡し

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 です。
PHP_PHP チュートリアルの値渡しと参照渡し

$b += 2 の後、

PHP_PHP チュートリアルの値渡しと参照渡し

つまり、$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 であるためです。

PHP_PHP チュートリアルの値渡しと参照渡し
$p3 = $p2 ステートメント実行直後

PHP_PHP チュートリアルの値渡しと参照渡し
そのため、上記の結果情報が出力されます。これは、アドレス文字 & が機能しているためです。

完全なコードは次のとおりです:

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
?>
結論: 値の転送と参照の転送は、メソッド/関数のパラメーターを渡すときの代入操作に似ています。


www.bkjia.com本当http://www.bkjia.com/PHPjc/478049.html技術記事 PHPには値渡しと参照渡しがあります。後者では、変数を識別するためにアドレス文字を使用する必要があります。代入演算の使用例は次のとおりです。 1. 値の転送 1) 基本データ型: 01 ?php 02 $a...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
PHP 拡張子 intl
から 1970-01-01 08:00:00
0
0
0
phpのデータ取得?
から 1970-01-01 08:00:00
0
0
0
PHP GET エラー レポート
から 1970-01-01 08:00:00
0
0
0
phpを上手に学ぶ方法
から 1970-01-01 08:00:00
0
0
0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート