PHPでは、オブジェクトの配列を作成する場合、オブジェクトメソッド(データメンバーではありません)が配列内のオブジェクトの各インスタンスごとにコピーされるか、または一度だけコピーされますか?私はメモリの理由から、後者は真実であると仮定します。 StackOverflowコミュニティでこれが正しいことを確認したかっただけです。例えばPHPでは、オブジェクトメソッドコードがインスタンス間で重複または共有されていますか?
、私は現実法1(で明らかにすなわち
class MyClass {
public $data1;
private $data2;
public function MyClass($d1, $d2) {
$this->data1=$d1; $this->data2=$d2;
}
public function method1() { }
public function method2() { }
}
、メソッドのカップルとMyClassクラスがあるとします)と方法2は()空関数ではありません。 は、今ではこれらのオブジェクトの配列を作成すると:
$arr = array();
$arr[0] = & new MyClass(1,2);
$arr[1] = & new MyClass(3,4);
$arr[2] = & new MyClass(5,6);
したがってPHPは、三個のオブジェクトインスタンスの各々について、メモリ内のデータメンバ3組を記憶しています。私の質問は、PHPは、$ arrの3つの要素のそれぞれについて、method1()とmethod2()(そしてコンストラクタ)のコピーを3回保存するのでしょうか?私は、メモリに各メソッドの200個のコピーを保存する必要があるため、〜200個のオブジェクトの配列があまりにもメモリを消費するかどうかを判断しようとしています。
お時間をいただきありがとうございます。
確かに、方法は、定義上、プロシージャに対する*参照*ですか?この場合、プロシージャの仕組みは一度しか定義されません(オブジェクトをインスタンス化するときにクラスをロードする* not *)。すべてのインスタンスは単にそのプロシージャを指し示すだけです。これは純粋な推測ですが、クロージャでない限り、どのようなタイプのメソッド/関数に対しても他の方法であるとは見えません。 – DaveRandom
Hmm。良い質問。これらのメソッドの中で定義されている静的な変数に何が起こるのか不思議です。それはメソッドのすべてのインスタンスによって共有される1つの静的なvarか、または各インスタンスが独自の静的varを取得するかどうかです。 –
@DaveRandom Javascriptでは、クラスを定義すると、メソッドがオブジェクトに埋め込まれます。それらのコンテンツは、インスタンス間で「共有」されません。 –