Skip to content

Commit e95bf3f

Browse files
v1.21.3 Release
「参照渡し | PHP-TECHNIQUE」ページの誤字・脱字修正
1 parent c894190 commit e95bf3f

File tree

1 file changed

+4
-10
lines changed

1 file changed

+4
-10
lines changed

php-pass-by-reference.html

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ <h2 class="subtitle">お決まりの書き方</h2>
118118
上記のように関数呼び出しでリターン値以外のデータも取得したい時によく使われる方法だと思います。<br />
119119
他にもクロージャーとのデータのやり取りをする場合にも使われる事がありますが、ここで注目すべきは<code>$test</code>という引数の先頭に<code>&</code>(アンパサンド)が付いているところです。<br /><br />
120120

121-
これはC言語でもよく使われる書き方で「アドレス渡し」と呼ばれていますが、PHPは昔からC言語を部分的にリスペクトしているような傾向があるので、これもその一つだと思っています。<br />
121+
これはC言語でもよく使われる書き方で「アドレス渡し」と呼ばれていますが、PHPは昔から他のプログラミング言語を部分的にリスペクトしているようなところがあるので、これもその一つだと思っています。<br />
122122
PHPとC言語ではコンパイラの処理に違いがあるので、PHP側の処理では「参照渡し」と呼ぶ事にします。<br /><br />
123123

124124
まずは「アドレス渡し」の考え方を理解しておいた方が分かり易いと思いますので以下をご覧ください。<br />
@@ -145,8 +145,6 @@ <h2 class="subtitle">「アドレス渡し」について</h2>
145145
</blockquote>
146146

147147
Unixシステムの事をご存じでない方もおられると思いますので、同じ場所を指し示すラベルのようなものだと考えてもらった方が分かり易いかもしれません。<br /><br />
148-
149-
つまりPHPでは<code>&</code>(アンパサンド)を使って変数の所在をラベルのようなもので管理しているのに対して、C言語では<code>&</code>(アンパサンド)を使う事でアドレス表記が可能で、ポインタ変数を使ってそのアドレス自身を管理する事ができます。<br />
150148
</div><br />
151149

152150
<a id="compare"></a>
@@ -201,7 +199,7 @@ <h2 class="subtitle">PHPとC言語との比較</h2>
201199
}
202200
</pre><br />
203201
※C言語で<code>char</code>というのは1バイトのデータ型です。<br />
204-
※C言語で変数名の前に<code>*</code>(アスタリスク)をつけて宣言するとポインタ変数になります。また、宣言以外のところでアスタリスクをつけるとそのアドレスが指し示す先のメモリ内容を参照できます<br /><br />
202+
※C言語で変数名の前に<code>*</code>(アスタリスク)をつけて宣言するとポインタ変数になります。また、ロジックの中でアスタリスクをつけるとそのアドレスが指し示す先のメモリ内容を参照できます<br /><br />
205203

206204
上記をフローで表すと以下のようになります。
207205
<dl>
@@ -215,14 +213,10 @@ <h2 class="subtitle">PHPとC言語との比較</h2>
215213
<div class="menu-line"></div><br />
216214

217215
以上のように、処理の流れはいずれも同じですが変数の扱い方が異なっています。<br /><br />
218-
219-
PHPでの<code>$inside</code>変数は関数定義のところで<code>&</code>(アンパサンド)を付けて渡されていますが、関数内で値を設定する時は特別な記述をしているわけでもなく、普通に1が代入されています。<br />
220-
これに対してC言語での<code>inside</code>変数は関数へ<code>outside</code>変数を渡す時に<code>&</code>(アンパサンド)を付けて渡されていますが、関数内ではポインタ変数として処理されています。<br /><br />
221-
222216
上記のサンプルソースでは変数の値が「$inside(PHP) = *inside(C言語)」となり同じ値になりますが、C言語で「*(++inside)」と書くとカウントアップされたアドレス(101番地)が指し示す先の変数(鈴木さんの家)を参照する事になるため内容が入れ替わります。<br /><br />
223217

224-
つまり、C言語での「アドレス渡し」はポインタ変数として制御できるのでその変数をカウントアップ等で更新すればアドレスを変更する事も可能で、<code>inside</code>変数以外のメモリ領域も自由に読み書きできるようになります<br />
225-
これに対してPHP上ではこのポインタ変数の代わりにラベルのようなもので管理されている関係で<code>testFunction</code>関数内では常に<code>$outside</code>変数を指し示す事になるので、ポインタ変数のように参照先を切り替える事ができません。<br />
218+
PHPでの<code>$inside</code>変数は関数定義のところでC言語のように<code>&</code>(アンパサンド)を付けて渡されていますが、関数内で値を設定する時は特別な記述をしているわけでもなく、普通に1が代入されています<br />
219+
そしてラベルのようなもので管理されている関係で<code>testFunction</code>関数内では常に<code>$outside</code>変数を指し示す事になるので、ポインタ変数のように参照先を切り替える事ができません。<br />
226220
</div><br />
227221

228222
<a id="example"></a>

0 commit comments

Comments
 (0)