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