※この記事は読者によって投稿されたユーザー投稿のため、編集部の見解や意向と異なる場合があります。 また、編集部はこの内容について正確性を保証できません。
ヒューマンリソシア株式会社はコラム「マジックメソッドを巡る旅 その3」を公開しました。 前回のデストラクタの続きでございます。 前回見ていただいたとおり、デストラクタは「そのインスタンスが消滅するタイミング」で走ります。 コンストラクタが「インスタンスが生成されるタイミング」なので、大変に対照的で分かりやすいです。 なので、コンストラクタの話と合わせるような流れで、少し解説をしていきましょう。 まず「書き方」ですが、すでに前回書いてしまっておりますが、__dectructメソッドを用います。 改めて、サンプルコードを書いてみましょう(前回と一緒ですが)。 class hoge { public function __destruct() { echo “call hoge’s destruct\n”; } } // $obj = new hoge(); __constructは「クラス名と同一のメソッド名」という古い書き方がありました。 __destructは…じつは、古い書き方がありません。なので、書き方の新旧で困る、というケースは、ないんですね。 また、デストラクタは実は、クラスが書ける言語のなかでも、存在するケース、存在しないケースがあります。 C++にはデストラクタがあり、クラス名の前にチルダ(~)を付けたメソッド名が、デストラクタになります。 Pythonは__del__メソッドがデストラクタになります。 Rubyはdefine_finalizerというものがあり、デストラクタ相当の動きをするようです。 Javaには、デストラクタがありません。 …色々ありますねぇ。 デストラクタを語る文脈では、よくRAII(Resource Acquisition Is Initialization)という概念が出てきます。 この辺は、使い方を後述しますので、そのタイミングでもう少し掘りこんでみましょう。 まずは、コンストラクタと対比するように、書き方や機能、ワンポイントを掘り下げていきます。 継承時の書き方ですが、コンストラクタとは逆で「子クラスの(より局所的な)処理をしてから、 親クラスの(より広域的、基本的な)処理をする」事が多いので、parent::は、最後に呼び出すとよいでしょう。 この続きは以下をご覧くださいhttp://resocia.jp/column/1761/
この記事のキーワード

人気記事トップ10

人気記事ランキングをもっと見る