3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【備忘録】PHPのリファレンスについて考えてみる

Last updated at Posted at 2019-10-17

#目的
PHPリファレンスを理解する。

#背景
PHPのforeachについての記事を書いたときに、指摘いただいたのですが、リファレンスの意味が全くわからない。

【備忘録】PHPのforeachについて考えてみる

#参考資料
PHPの参照はCのポインタとは別物

リファレンスとは

【PHP】参照(リファレンス)渡しとは?使い方をわかりやすく説明

#1 リファレンスについて考える?

公式ドキュメントによると、

PHP において、リファレンスとは同じ変数の内容を異なった名前で コールすることを意味します。これは C のポインタとは異なります。 リファレンスを使ってポインタの演算をすることはできませんし、 リファレンスは実メモリのアドレスでもありません。詳細は リファレンスが行わないこと を参照ください。 そうではなく、リファレンスはシンボルテーブルのエイリアスです。 PHP では、変数名と変数の内容は異なっており、 このため、同じ内容は異なった複数の名前を有する事が可能であることに 注意してください。最も良く似ているのは、Unix のファイル名とファイルの 関係です。この場合、変数名はディレクトリエントリ、変数の内容は ファイル自体に対応します。リファレンスは、Unix ファイルシステムの ハードリンクのようなものであると考えられます。

だめだ!全くわかんねー!

次はこれを読んでみます
【PHP】参照(リファレンス)渡しとは?使い方をわかりやすく説明

ちょっとだけわかったかも!
今までの認識だと、関数の引数に変数を入れたら、値が代入されるっていう認識だったけど、関数の引数には変数が入るパターン(参照渡し)と、値が入るパターン(値渡し)があるんだな

値渡し
<?php
function keisan($a){
  $a++;
  echo $a;
}
 
$b=1;
keisan($b);
//2と表示
echo $b;
//1と表示
?>
参照渡し
<?php
function keisan(&$a){
  $a++;
  echo $a;
}
 
$b=1;
keisan($b);
//2と表示
echo $b;
//ここでも2と表示される
 ?>

値渡しは引数に値を入れてるだけで、変数に影響はないから、echo $bの出力が1になるけど、

参照渡しは引数に変数を代入してるから、変数にも影響が出て、echo $bすると、2になる。

これからは、変数と値を別々に捉えた方が良さそうだ、、

理解を深めるために、また
公式ドキュメントを読み返してみた。

PHP において、リファレンスとは同じ変数の内容を異なった名前で コールすることを意味します。

さっき理解した感じで説明すると、
y = 5x = 5が存在した時、x,yを値ではなく、変数として関数の引数に入れてもいいという概念があるって伝えたいのかな。

リファレンスはシンボルテーブルのエイリアスです。

シンボルテーブルとは?エイリアスとは????
調べて見る!!!

PHPのシンボルテーブルを覗いてみる

PHPのシンボルテーブルというのはC実装のレベルの用語で、その時点で有効な変数テーブルのことを指します。つまり、グローバルスコープならグローバル変数を管理する変数テーブル、関数スコープならローカル変数を管理する変数テーブルの意味になります。

まだわからんねー、テーブルとは??

表のように複数の異なる要素間の対応関係を管理するためのデータ構造や格納領域をテーブルという。この場合は必ずしも2次元の格子状に整理された構造を指すとは限らない。

これはわかりやすい
なんとなーくわかってきた!:thinking:

要するに、
変数と値の関係性を管理?記録?する奴が存在しているんだな!変数の更新とか、参照渡しとかってこいつが管理してるのかなー

この概念もなんか重要な気がする。
IBMさんの変数テーブル

いつどこで使用するかに応じて、名前は同じでも値はそれぞれ異なる変数を定義することができます。 それには、それぞれ異なる変数テーブル内の同一変数に、それぞれ異なる値を割り当てます。

変数テーブルが複数あるっていう概念。
大事な気がする

次はエイリアスについて調べてみた

あだ名。

急に簡単なものが出てきたなー

minoさん記事から

リファレンスを扱うには&演算子を用います

$a = & $b;

さっきのドキュメントもう一度解釈してみる。

リファレンスはシンボルテーブルのエイリアスです。

ってことは、
リファレンスとは、変数と値の関係性を管理?記録?する奴のあだ名。

って解釈でいいのかこれ、、、、

まぁいいか(諦め)

#まとめ
リファレンスとは、
プログラミング実行する時点で、有効な変数と値の関係性を管理するテーブルのあだ名。

、、、、理解するのに諦めました

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?