すでに質問済みの内容でしたら申し訳ありません。
php4を使用していまして、
HTML_QuickFormとSmartyを最近使い始めました。
ネットや書籍のサンプルコードを見ながら使用しているのですが、
$renderer =& new HTML_QuickForm_Renderer_ArraySmarty($smarty);
上記のような場合や
フォームのコンストラクタ呼び出しの場合に
=&を使用している意味が理解できません。
・=&はオブジェクトの参照渡しという認識で合っていますでしょうか?
・参照渡しであった場合、実態を渡すのでなく参照で渡すべき理由とは何でしょうか?
ご教授願えれば幸いです。
よろしくお願い致します。
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はオブジェクト指向が弱いからという所で落ち着きそうでしょうか。
ご回答ありがとうございました。
No.2
- 回答日時:
ちなみにマニュアルからの引用ですが
-----------------------------------
PHP 5 以降、new は自動的にリファレンスを返すようになりました。そのため、この場面で =& を使用することは非推奨となり、 E_STRICT レベルのメッセージが表示されるようになりました。
早速のご回答ありがとうございます。
>PHP 5 以降、new は自動的にリファレンスを返すようになりました。
勉強不足でした。お恥ずかしい限りです。
php4→php5の違いという内容で様々な所で記述されていました。
ありがとうございました。
No.1
- 回答日時:
newでコンストラクタを呼び出すとオブジェクトが生成され、その生成されたオブジェクトのポインタ(アドレス)が返されます。
実体はnewにより既に作られているので、その実体のポインタ(アドレス)を変数に保持しておけば良いのです。
参照渡しではなく実体渡しをして、変数に実体を代入(実体のコピー)してしまうと、newで作られた実体と、変数の実体は別物になってしまいます。この状態では、不要になった時に変数の方の実体は破棄出来ますが、newで作られた実体はアドレスが失われている為に破棄出来ません。それ以前に、実体が2つになってしまいメモリが無駄です。
早速のご回答ありがとうございます。
>不要になった時に変数の方の実体は破棄出来ますが、newで作られた実体はアドレスが失われている為に破棄出来ません。
なるほど、理解できました。
>それ以前に、実体が2つになってしまいメモリが無駄です。
仰る通りですね。
コーディング(製造)や設計上で、リソースの節約以外に
参照渡しにする事でのメリットのようなものはあるのでしょうか?
お時間がある時にでもご教授頂ければ幸いです。
お探しの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のクラスメソッドの定義が長...
-
php インスタンスとオブジェク...
-
onedrive にexcelファイルをア...
-
フォントの色を変えるには?
-
バッチを用いたフォルダの自動移動
-
phpとaspの違いについて
-
form actionで二つ送信先を指定...
-
phpで画像がどうしても文字化け...
-
透過PNGが透過されない!!
-
PHP8を使うと、大量のWarningが...
-
index.phpって何ですか? 具体...
-
PHPで、エラーがない場合のみ画...
-
これの対応OSを教えて下さい。p...
-
ワードプレスサイト PHP8.0.25...
-
PHPからロリポップ!のメールサ...
-
PHPで複数ファイルのダウン...
-
PHPをhtmlに読み込んだファイル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「クラス関数」「メンバ関数」...
-
ラッパークラスって何ですか?
-
phpのクラスメソッドの定義が長...
-
class定義のphpをファイル分割...
-
PHP4、PHP5 1ファイル複数クラ...
-
phpのクラスにて別ファイルの変...
-
'_'(アンダースコア)の使い方...
-
コンストラクタで参照渡しをす...
-
データベースで値をインクリメ...
-
クラス
-
【PHP】クラス と 関数 の違い
-
ユーザ定義関数にデフォルト引...
-
PHPのフレームワークの中でSmar...
-
phpのオブジェクトの使用方法に...
-
phpでクライアントのブラウザの...
-
配列とオブジェクトの違い
-
POSTとGET
-
Codeigniter コアクラスの継承
-
外部ファイルのクラスのインス...
-
class.upload.phpの戻り値(返...
おすすめ情報