スレッド表示 | フラット表示〕 全トピック 920 件中 208 番目 次≫ ≪前

オブジェクトの参照の代入について

created: 2006-08-04 17:40 | modified: 2006-08-06 16:45 | reply: 3

[3204] オブジェクトの参照の代入について

user: PHP初心者 | created: 2006-08-04 17:40
PHP初心者の者です。
下の例題について質問させてください。

<?php
class Test {
function gettest() {
return "テスト";
}
}

$test = new Test();  <-----※
echo $test->gettest();
?>

※の部分ですが、いろいろな他のサンプルを見るとオブジェクトを生成する際、
 ・$test = new Test(); ・・・ ?
 ・$test =& new Test(); ・・・ ?
と両方見受けられます。 

結果は同じになりましたが、?と?は別の意味があるのでしょうか?
どのように使い分ければよいのでしょうか?
reply: 3205 返信 編集 削除

[3205] Re.オブジェクトの参照の代入について

user: ゆうじ | created: 2006-08-06 00:00
こんばんわ。

これは私も知りたかったところです。
どなたからもレス付きませんね。

$test  =  new Test();
$test1 = $test;
$test2 =& $test;

上のようにオブジェクトをコピーする時には、
「コピー」と「リファレンス」の違いが出るのは認識してます。

が、インスタンス生成時の&付きの代入演算子は、
インスタンスのリファレンスというわけでもありませんし。
コンストラクタの宣言時に & を付けても同じでしたし。
2つの違いを見つけることは出来ませんでした。

このスレッドしばらくトップにしときたいところです。

$test =& new Test();
まったく参考になりませんが、
私はこのパターンは使っていません。


--- 追記 ---
よ?く探せばあるものでMLで見つけました。
http://ns1.php.gr.jp/pipermail/php-users/2004-January/020601.html

これによると、動作的な違いはなく、
「オブジェクト1個分のメモリー節約」というこのようです。

●リファレンスが行うことは何ですか?
http://www.php.net/manual/ja/language.references.whatdo.php

↑マニュアルによると、PHP5では、new 演算子が
リファレンスを返すので =& は非推薦とのことです。
生成時は、$test = new Test(); でよいと思います。
Parent: 3204  reply: 3206 返信 編集 削除

[3206] Re.Re.オブジェクトの参照の代入について

user: ach | created: 2006-08-06 12:21
無理やり動作的な差を作ってみたり……
$a = new test();
//$a =& new test();

$a->hoge = "bar";
var_dump($test);

class test
{
var $hoge = "foo";
function test()
{
$GLOBALS["test"] =& $this;
}
}
まあこんなコード使う人もいないでしょうけど……
Parent: 3205  reply: 3209 返信 編集 削除

[3209] '= new' と '=& new' の違い

user: ゆうじ | created: 2006-08-06 16:45
achさんこんにちは。いつもありがとうございます。

new 演算子は常に新しいインスタンスを生成するので、
'=&' にしても '=' にしても、代入後のインスタンスを
比較した場合、違いがなかったんですね。

'=&' は、「new 演算子が生成したインスタンス」を
操作したい場合に有効ということがわかりました。
勉強になります、ありがとうございました。


'=&' の方が、自然な考え方ですね。
PHP5 で $obj = new class() とした場合、
リファレンスが返されるようになったのも頷けます。
Parent: 3206  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 208 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑