人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

phpの文法に関する質問です。
MDB2のマニュアルに下記のようなコードが書いてあります。

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

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

●質問者: n_maco2
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:CONNECT localhost MDB2 PHP URL
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● うぃんど
●100ポイント ベストアンサー

【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');

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

◎質問者からの返答

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

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

よくわかりました!

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ