1
0

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 1 year has passed since last update.

PHP オブジェクトと参照を読んでみた

Last updated at Posted at 2022-08-25

概要

今の自分の知識量

  • オブジェクトは参照渡しとはちょっと違うけど似たような振る舞いをすることは知っている。

内容

  • 「オブジェクトはデフォルトで参照渡しになります!」とよく言われるけど、厳密に言うと少し違うらしい。
  • オブジェクト変数の値にオブジェクトそのものは格納されない。格納されているのはオブジェクトのIDのみ。
  • PHPではオブジェクトのIDを用いてオブジェクトにアクセスできるようになっている。
  • だからオブジェクト変数を他の変数に更に格納したりしてもオブジェクトのIDが他の変数に格納されるだけなのでオブジェクトIDを用いてオブジェクトを参照すると同じオブジェクトを参照する。
  • なのでインスタンス変数の値を他の変数に格納してもオブジェクトID値がコピーされる。結果として同じオブジェクトを指すようになっているだけ。
  • 参照渡し:参照先情報を他の変数に渡される。結果同じ値をいじれる。
  • オブジェクト:インスタンス変数内のオブジェクトIDが他の変数に渡される。結果アクセスするオブジェクトが同じになる。
  • オブジェクトは参照渡しとは一切関係ない!むしろ普通の変数と同じように「格納されている値のコピー」が行われている。ただ、「格納されている値」がオブジェクトIDであり、そのオブジェクトIDをコピーするので同じオブジェクトを閲覧している。

private__Online_Whiteboard_for_Visual_Collaboration.png

作成下オブジェクトを別ものとしてコピーしたい場合

追加情報

@error_401 様より下記のご知見を頂きました!

  • PHPでは他言語で「参照」といっているものを「リファレンス」と呼んでいます。
    • リファレンスとは同じ変数の内容を異なった名前でコールすることを意味します。ポインタとは異なります。リファレンスは実メモリアドレスでも有りません。 リファレンスとは
  • さらに他言語で「参照渡し」といっているものを「リファレンス渡し」と呼んでいます。
    • リファレンスにより関数に変数を渡すことが可能です。この場合関数内でその引数を修正可能になります。 リファレンス渡し

参考文献

1
0
3

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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?