phpの文法に関する質問です。

MDB2のマニュアルに下記のようなコードが書いてあります。

$mdb2 =& MDB2::connect('pgsql://usr:pw@localhost/dbnam');

この中の=&の意味はなんなんでしょうか。
MDB2に関する質問ではなく、phpにおける=&という記述の意味に関する質問です。
できればマニュアル等で調べたいのですが、検索文字列が記号のためうまく検索できなかったので質問させていただきます。
もし可能であればPHPマニュアルの該当URLをいただけると非常に助かります。
お手数ですがよろしくお願いいたします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2010/08/23 21:43:29
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:windofjuly No.1

回答回数2625ベストアンサー獲得回数1149

ポイント100pt

【1】演算子のサンプルは下記の例4くらいでしょうか

http://php.net/manual/ja/language.oop5.basic.php

<?php
$instance = new SimpleClass();

$assigned   =  $instance;
$reference  =& $instance;

$instance->var = '$assigned will have this value';

$instance = null; // $instance と $reference は null になります

var_dump($instance);
var_dump($reference);
var_dump($assigned);

上記の動きをつたないながら解説させていただきますと下記のような具合になります

(1)$instance = new SimpleClass();

インスタンス(仮にaとします)が生成され、$instanceにはIDとインスタンスaが格納されてます

(2)$assigned = $instance;

aをコピーして新たにbが生成されますが$assignedに格納されるIDは$instanceと同一になります

(3)$reference =& $instance;

インスタンスは作成もされなければ、コピーもされません。$referenceは$instanceを利用するための別名となります

(4)$instance->var = '$assigned will have this value';

$instanceに格納されているIDに従ってインスタンスaのvarに文字列が格納されます

$assignedも同一のIDを持っているためインスタンスbのvarにも同一の文字列が格納されます

(5)$instance = null; // $instance と $reference は null になります

$instanceのIDがnullになりインスタンスaは開放されました

別名である$referenceから参照したくてもインスタンスaは開放されていてますから、こちらもnullとなります

インスタンスbは開放されていませんので$assigned->varには'$assigned will have this value'が入ったまま残ってます

(6)var_dump

結果を確認するための出力です

 

【2】短くまとめると下記になります

= 新たに別のインスタンスを生成(生成されたものは別物となってしまいます)

=& 参照渡しになります(同じインスタンスを使うことになります)

 

【3】$mdb2 =& MDB2::connect('pgsql://usr:pw@localhost/dbnam');

インスタンスを無駄に増やさず別名を使って利用しやすくしているということになります

id:n_maco2

詳しい説明ありがとうございます!

なるほど、参照渡しだったのですね。

よくわかりました!

2010/08/23 21:43:03

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません