すでに質問済みの内容でしたら申し訳ありません。
php4を使用していまして、
HTML_QuickFormとSmartyを最近使い始めました。
ネットや書籍のサンプルコードを見ながら使用しているのですが、
$renderer =& new HTML_QuickForm_Renderer_ArraySmarty($smarty);
上記のような場合や
フォームのコンストラクタ呼び出しの場合に
=&を使用している意味が理解できません。
・=&はオブジェクトの参照渡しという認識で合っていますでしょうか?
・参照渡しであった場合、実態を渡すのでなく参照で渡すべき理由とは何でしょうか?
ご教授願えれば幸いです。
よろしくお願い致します。
No.1
- 回答日時:
newでコンストラクタを呼び出すとオブジェクトが生成され、その生成されたオブジェクトのポインタ(アドレス)が返されます。
実体はnewにより既に作られているので、その実体のポインタ(アドレス)を変数に保持しておけば良いのです。
参照渡しではなく実体渡しをして、変数に実体を代入(実体のコピー)してしまうと、newで作られた実体と、変数の実体は別物になってしまいます。この状態では、不要になった時に変数の方の実体は破棄出来ますが、newで作られた実体はアドレスが失われている為に破棄出来ません。それ以前に、実体が2つになってしまいメモリが無駄です。
早速のご回答ありがとうございます。
>不要になった時に変数の方の実体は破棄出来ますが、newで作られた実体はアドレスが失われている為に破棄出来ません。
なるほど、理解できました。
>それ以前に、実体が2つになってしまいメモリが無駄です。
仰る通りですね。
コーディング(製造)や設計上で、リソースの節約以外に
参照渡しにする事でのメリットのようなものはあるのでしょうか?
お時間がある時にでもご教授頂ければ幸いです。
No.2
- 回答日時:
ちなみにマニュアルからの引用ですが
-----------------------------------
PHP 5 以降、new は自動的にリファレンスを返すようになりました。そのため、この場面で =& を使用することは非推奨となり、 E_STRICT レベルのメッセージが表示されるようになりました。
早速のご回答ありがとうございます。
>PHP 5 以降、new は自動的にリファレンスを返すようになりました。
勉強不足でした。お恥ずかしい限りです。
php4→php5の違いという内容で様々な所で記述されていました。
ありがとうございました。
No.3ベストアンサー
- 回答日時:
がると申します。
ちと興味もあり、実験してみたのですが。
PHP4において、=&でnew演算子の結果を受け取っても「何の意味もない」みたいです。
具体的には
・new演算子で=&でインスタンスを受け取る
・関数の引数で、&なしでインスタンスを設定する
・関数の宣言にも&なしにする
で「別インスタンスがcopyされている」事を確認、また、
・new演算子で=でインスタンスを受け取る
した後に
・関数の引数で、&でインスタンスを設定する
または
・関数の宣言で&にする
とすることで普通に参照で渡されることを、それぞれ確認しました。
或いは過去の流儀とかいくつかあるのかもしれませんが、PHP4.3.10以降のいくつかのテスト(4.3.10、4.3.11、4.4.1、4.4.2、4.4.3、4.4.4)で、上述の結果がでています。
参考までに。
この回答への補足
ご回答頂きました皆様。
ありがとうございました。
質問を締め切らせて頂きます。
全ての方にポイントを出したいのですが、
システム上そうはいかないのでご了承頂きたいです。
ありがとうございました。
返信が遅くなってしまい申し訳ありません。
ご回答ありがとうございます。
>PHP4において、=&でnew演算子の結果を受け取っても「何の意味もない」みたいです。
本文を拝見しました。
意外な結果が出るんですね。
やはりPHP4はオブジェクト指向が弱いからという所で落ち着きそうでしょうか。
ご回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 関数ポインタの高速化のメリット 7 2023/05/05 20:15
- その他(Microsoft Office) 【スプレドシート】IMPORTRANGE関数とSUMIFSの組み合わせ 1 2023/03/05 18:17
- 法事・お盆 従姉妹のお墓参りにて(墓参りのみ) 2 2022/09/05 10:56
- Excel(エクセル) Excel 表の作成について 3 2022/06/16 12:15
- Visual Basic(VBA) VBAでプロセデュア間で共有できるエリアの設定方法は? 3 2023/04/15 19:06
- その他(プログラミング・Web制作) プログラムの起動、利用について、使用期間を設定する方法 3 2023/08/06 21:03
- 化学 化学 電気 物理 電気化学の実験をサイクリックボルタモグラムCV法を利用して行いました。 参照電極に 1 2023/06/26 10:35
- PHP php 入力画面から確認表示画面へ情報の受け渡しについて。 1 2023/06/07 18:00
- 法学 著作権譲渡契約における「債務」の意味についてお聞きしたい 2 2022/08/15 17:08
- JavaScript 読み込んだQRコードをフォームに受け渡したい 1 2023/05/18 11:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列とオブジェクトの違い
-
phpのクラスメソッドの定義が長...
-
「クラス関数」「メンバ関数」...
-
onedrive にexcelファイルをア...
-
こちらはただの直列処理ですか?
-
ワードプレス、Contact Form 7...
-
拡張子php画像をjpg画像等に変...
-
PHPとCSVで簡易データベースな...
-
include先でのinclude元の変数...
-
リダイレクト元のURLの取得方法...
-
メールフォームのタイトルが文...
-
php エラー
-
PHPのif文でその処理を途中で抜...
-
VBでメールを送る時のSMT...
-
one drive のアップロード失敗...
-
別PHPファイルに変数を渡す
-
ワードプレスサイト PHP8.0.25...
-
パースエラーとは?
-
Image Magickの関数が使えない
-
文字化けで混乱中です...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「クラス関数」「メンバ関数」...
-
phpのクラスメソッドの定義が長...
-
ラッパークラスって何ですか?
-
'_'(アンダースコア)の使い方...
-
class定義のphpをファイル分割...
-
配列とオブジェクトの違い
-
PHP4、PHP5 1ファイル複数クラ...
-
関数定義の関数名の前にある&(...
-
php、可変プロパティ名について
-
クラス設計の良い参考書を教え...
-
phpのクラスにて別ファイルの変...
-
class.upload.phpの戻り値(返...
-
【PHP】クラス と 関数 の違い
-
php インスタンスとオブジェク...
-
Re: Cookieを使ってオブジェク...
-
PHPでサブクラスからスーパクラ...
-
クラス
-
onedrive にexcelファイルをア...
-
フォントの色を変えるには?
-
index.phpに入るには、どうすれ...
おすすめ情報