コンストラクタの中で参照を作成すると結果が混乱する可能性があります。 本節ではチュートリアル形式で説明しますが、 この問題を避けるために役立つはずです。
<?php |
コピー演算子 = により作成された $bar1 と 参照演算子 =& により作成された $bar2 の間の差異があるかどうかを 確認してみましょう。
<?php |
明らかに違いはありませんが、実際には動作は非常に異なっています。つまり、 $bar1 と $globalref[0] は参照されておらず、同じ変数でもありません。 これは、"new" がデフォルトで参照を返さず、代わりにコピーを返すためです。
注意: (PHP 4 以降ではリファレンスカウンティングを使用しているため)、 参照ではなくコピーを返すことで性能が低下することはありません。逆に 多くの場合、参照を使うよりも単純にコピーを使った方が良い結果となります。 これは、参照の作成には時間がかかりますが、コピーの作成には 理想的には時間が全くかからないからです (ただし、大きな配列 またはオブジェクトでその一つが変更されると、次々に参照先の他の要素に 参照先に波及するといった場合を除きます)。
<?php |
最後に別の例について考えてみてください。
<?php |
上の例の出力は以下となります。
class A: 10 class B: 10 class B: 10 class A: 11 class B: 11 class B: 11 |