質問 1: 質問は前述したとおりです。私は自分でテストしました
class Obj{ public $i; public function construct($t){ $this->i = $t; echo "执行构造函数$this->i"; echo "<br>"; } public function destruct(){ echo "执行析构函数$this->i"; echo "<br>"; } } $obj1 = new Obj(1); $obj2 = new Obj(2); 执行构造函数1执行构造函数2执行析构函数2执行析构函数1
質問 2: サブクラスで親クラスのコンストラクター メソッドを呼び出すとき、それは親クラスを初期化するだけですか、それともオブジェクトを生成しますか?親クラスの?
======================================更新========= =============================
さらに詳しい説明を見つけてください:
データを保存するためにヒープとスタックのどちらを使用するかは PHP によって決定されます。PHP 開発者は気にする必要はありません。
転送:
PHP5 の Zend Engine の実装では、すべての値はヒープ上の領域に割り当てられ、参照カウントとガベージ コレクションを通じて管理されます。
PHP5 の zval 構造体への Zend エンジン ポインターは、主に値を操作するために使用され、多くの場所で zval の二次ポインターを介して操作されることもあります
PHP7 の Zend エンジン実装では、値は zval 構造体自体を介して操作されます。 (ポインターではありません)
新しい zval 構造は、VM のスタック、HashTable のバケット、および属性スロットに直接保存され、ヒープ上のメモリの割り当てと解放の操作が大幅に軽減されます。単純な値の参照カウントとガベージ コレクションを回避します。
==================================== UPDATE1========= ============================
具体的な説明を見つける
$p1 =このコードの場合、 $p1 はスタック メモリ内のオブジェクト名です。 詳細については、次の図を参照してください。最初にインスタンス化されたオブジェクトは後で解放されます。
new Person(); は実際にはオブジェクトへの参照を返し、その参照はスタックに格納されている変数であり、そのエンティティを指すポインタです。ヒープに割り当てられたオブジェクト
これは、PHP の基礎となるストレージ変数には、変数のライフサイクルを維持するためのハッシュ シンボル テーブルがあることも説明しています。シンボル テーブルには、key=>value のペアが含まれています。ここで、key は変数名であり、key は変数を指します。 zval構造体、つまりvalueの先頭アドレスです
コンストラクタとデストラクタの実行は実際にはスタック構造を使用します。Obj(2)は後から作成されるため、スタックの先頭に位置し、 の順で破棄されます。 stack first in, last out の場合、Obj(2) が最初に破棄されます。 投稿者の質問を読んだ後、执行构造函数1 执行构造函数1 执行析构函数2 执行析构函数2
オブジェクト指向 言語と同様のデストラクターの概念を導入した理由も知りたいと思いました。デストラクタは、オブジェクトへの参照がすべて削除されたとき、またはオブジェクトが明示的に破棄されたときに実行されます
つまり、プロセスは次のようになります
Obj(1) 启动,申请自己的内存空间与上下文环境 Obj(2) 启动,申请自己的内存空间与上下文环境 Obj(2) 销毁,垃圾回收 Obj(1) 销毁,垃圾回收
それは、先入れ後出しのようなObj(1)です。インスタンス化後なので、最初に破棄してください
---------------------------- Obj(1) Obj(2) Obj(2) Obj(1) ----------------------------
質問 2: サブクラスで親クラスのコンストラクター メソッドを呼び出すと、親クラスが初期化されるだけで、親クラスのオブジェクトが生成されますか? 同じマニュアル。継承はよく知られたプログラミング機能であり、PHP のオブジェクト モデルも継承を使用します。継承は、クラス、オブジェクト、およびオブジェクト間の関係に影響を与えます。
以上がPHP が最初にインスタンス化されたオブジェクトのデストラクターを実行するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。