※ ChatGPTを利用し、要約された質問です(原文:参照渡しやリファレンスを返す事について)
参照渡しやリファレンスを返す事について
このQ&Aのポイント
PHPにおける参照渡しやリファレンスの使用について疑問があります。
引数の値を直接操作することはあまり良くないと言われますが、関数内で引数の値を再セットすることを守っている場合、常に参照渡しの方がメモリ効率は良いと思います。
インスタンス生成時やメソッドの呼び出し時に「&」を使用する意味や、メソッド定義自体の「&」について理解できません。
今疑問に思っているのが、「&」を付ける全ての事象についてす。
今まで参照渡しの方が効率や都合が良い場合にしか利用していませんで
したが、「特に値渡しで構わない場合も、参照渡しにした方が良いの
か?」という事から出てきた疑問です。
引数の値を直接操作する事はあまり良くない、と言われるのはこの辺の
絡みだと思うのですが、仮に関数内で引数の値を再セットする事を
忠実に守っていた場合、値渡しより常に参照渡しである方がメモリ
効率は良いと思います。(結局関数内で値渡しをする為、消費量としては
大きいと思いますが)
個人的には必要のある時にしか参照渡しを行わないという考えを変えるつもりは
ありませんが(それが妥当な目的と利用法であると思うので)、
プロな方としてはどうなのかな、という事を思ってしまったのです。
次に、仮に変数同士で行った場合、ポインタもどきの動作をしている
事から、意味合いは通じるのですが、インスタンスを生成する場合や
そのメソッドを呼び出して戻り値がオブジェクトの場合に見受けられます。
(マニュアルを見るとPHP5の場合、インスタンス生成時にそれを利用する
事は非推奨のようですが)
疑問なのは、インスタンスを初めて生成してオブジェクトが作られているのに
「&」で何を参照しに行っているのか?(クラスという雛形?)
メソッドが終了したら内部の変数は開放されると思うが、それを参照
する事が何故可能なのか?
リファレンス元をunset()してもリファレンス先が消えない事と同じ意味か?
そういうものだと言ってしまえばそれでおしまいですが、
そういう疑問があるせいか、それの使いどころが分かりません。
加えてメソッドに関しては、呼び出し時に「&」をつけていたり
メソッドの定義自体に「&」があったりして、使い方が分かりません。
呼び出し時の「&」は戻り値の参照でしょうけど、メソッド定義自体の
「&」が意味不明です。
ここばっかりはマニュアルを見ても理解出来ませんでした。
定義の参照って?という感じで考えが止まってしまいます。
(呼び出し時は、require等がされた時点でメモリで格納されている対象を見ている、という事なのか?)
どなたかご教示願います。
今、かなりPHPについて悩んできてしまいました(笑)
お礼
お礼が遅れてしまってすみません。 >メソッドが終了したら内部の変数は開放されると思うが、それを参照 > する事が何故可能なのか これは不可能だと思います。理由は仰る通りで。 それにも関わらず&がメソッド定義にあったので、理解不能だったのだと思います。 質問自体も、&について疑問に思う事が複数あって誤解を生 じてしまうような乱文でした・・・。 ありがとうございました。 ちょっと理解出来た気がします。