• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:&や&=について)

&や&=について

このQ&Aのポイント
  • 【&getInstance()】の&は何を意味していますか?
  • 【$myts =& TextSanitizer::getInstance();】の&=は何を意味していますか?
  • getInstance()関数の使用時の目的は何ですか?

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

  • ベストアンサー
  • masa6272
  • ベストアンサー率66% (93/140)
回答No.1

&は変数の値ではなく、値への参照(ポインタ)を意味します。PHP5では、オブジェクトの代入や、関数の引数ではオブジェクトの参照を渡します。 $a = new MyClass(); $a->aProperty = 0; $b = $a; $b->aProperty = 1; echo $a->aProperty; と書いた場合、PHP4では0が、PHP5では1が出力されます。つまりPHP4では代入の時に$bに$aがコピーされます。同じプロパティを持ちますが別のオブジェクトです。しかし、PHP5では$aと$bは同じオブジェクトを指します。 ここで、$b = &$a とすると、PHP4でも$bに$aの参照がコピーされ、同じオブジェクトを指すようになります。 質問の2番目は &= ではなく = &ですね。この&も同じ意味です。&=はこれで1つの別の演算子です。 最後の質問ですが、これはシングルトンと言うデザインパターンです。クラスのオブジェクトが複数生成されないようにします。 使用例ですが、データベース接続オブジェクトなどはいい例でしょう。 データベース接続オブジェクトは生成にコストがかかり、リソースも食います。複数のメソッドで同じデータベース接続オブジェクトを必要とする場合、他のメソッドですでに接続オブジェクトを生成していれば、それを再利用できますが、すでに作成されているかどうかを調べるのはそう簡単ではありません。しかし、このパターンを使えば、すでに存在すればそのオブジェクトを返しますし、なければ新しく作って返します。 使用するメソッドの中では、存在するかどうかを気にする必要がなくなります。

関連するQ&A