• ベストアンサー

参照渡し に関する質問

初歩的な質問ですみません。下記の構文の違いと使用例など教えていただけると助かります。 質問1 function func_a(&$a){ } func_a($a); と function func_b($a){ } func_b(&$a); の違い。 質問2 $a = new aclass(); と $a =& new aclass(); の違い。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

質問1についてですが 使用例としては特に区別はないのでどちらも同じです。 ただ後者の場合はPHPの設定によりエラーになる場合があります。 php.iniで allow_call_time_pass_reference = Off にしていると呼び出し時の参照渡し(後者の例)が出来なくなりますので参照渡しの引数は関数の定義時(前者の例)にしないといけません。 質問2ですが $a = new aclass( ); の場合、クラスのコピーが作成され、それが$aとして使われます。 大きなクラスの場合はコストのかかる処理です。 そのため $a =& new aclass( ); として時間とメモリの無駄を省くプログラムが多くありました。 PEARのライブラリでも =& が多く使われています。 ところがPHP5になりコピー渡しの処理が改善されクラスの参照渡しは推奨されなくなりました。 実際に$a =& new aclass( );とするとSTRICTエラーが出るようになりました。 PHP5以降であれば $a = new aclass( ); と書いたほうがいいでしょう。

hyakuichi
質問者

お礼

大変参考になります。 ありがとうございました。もやもやが解消しました。

すると、全ての回答が全文表示されます。

関連するQ&A