MDB2のマニュアルに下記のようなコードが書いてあります。
$mdb2 =& MDB2::connect('pgsql://usr:pw@localhost/dbnam');
この中の=&の意味はなんなんでしょうか。
MDB2に関する質問ではなく、phpにおける=&という記述の意味に関する質問です。
できればマニュアル等で調べたいのですが、検索文字列が記号のためうまく検索できなかったので質問させていただきます。
もし可能であればPHPマニュアルの該当URLをいただけると非常に助かります。
お手数ですがよろしくお願いいたします。
【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');
インスタンスを無駄に増やさず別名を使って利用しやすくしているということになります
詳しい説明ありがとうございます!
なるほど、参照渡しだったのですね。
よくわかりました!