2016-09-25 10 views
1

PHPでは、クラスを定義するとき、がしばしばあります__construct(コンストラクタ)、それは作成ときに「破壊」オブジェクトに実装__destruct(デストラクタ)。 PHPでオブジェクト指向のPHP関数__destructはどのように機能しますか?

それが今

を使用されて停止したときに、オブジェクトは、それが役に立つか、 '破壊' されますか?それはどのように正確に使用され、どのような場合にはPHPなどのプログラミング言語で便利になるのでしょうか?

答えて

0

"オブジェクトがもはや必要でないときは、削除する必要があります。ローカル変数として関数内で作成されたオブジェクト(...)オブジェクトが削除されるたびに、そのデストラクタメンバ関数が呼び出されます。オブジェクトを使用する前に適切に初期化する必要がありますが、オブジェクトが消える直前に呼び出される特別なメンバ関数が必要ですか?

多くの場合、答えはいいえ、私たちはコンパイラはデフォルトのno-opを作成しますが、あなたのオブジェクトには、それが作成された検出器ヒットのリストが含まれていると仮定します。ポインタ。今すぐには、deこのリストを削除したいのですが、おそらくそれが指すヒットではありません!コンパイラーは、オブジェクトが所有しているものを指し示しているのか、それとも削除されているのかを指しているのか、それとも単にオブジェクトに関係しているのか、

したがって、オブジェクトの存続期間中に他の動的オブジェクトが作成された場合は、そのオブジェクトを後で削除するデストラクタが必要です。このように整理しなければ、メモリを詰まらせる孤立したオブジェクト(メモリリークと呼ばれる)が残る可能性があります。デフォルトはデストラクタを定義するために、その良いアイデア許容できる場合であっても...」

もっと見る:OO Concept: Constructors & Destructors

+0

私は今、私はアイデアを持っていると仮定おかげしかし、メモリを汚染デストラクタについて。! –

+0

PHPでメモリに直接アクセスすることはできません。あなたのためにそれを管理し、ガベージコレクションを行います。ここでコピーして貼り付けたものは、ほとんど完全に無関係です。 –

+1

あなたのプロジェクトのスコープにもよりますが、子クラスは親のデストラクタを継承することがあります –

関連する問題