マジックメソッドを巡る旅 その3

※この記事は読者によって投稿されたユーザー投稿です:
  • 編集部の見解や意向と異なる内容の場合があります
  • 編集部は内容について正確性を保証できません
  • 画像が表示されない場合、編集部では対応できません
  • 内容の追加・修正も編集部では対応できません

ヒューマンリソシア株式会社はコラム「マジックメソッドを巡る旅 その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/

この記事が役に立ったらシェア!
メルマガの登録はこちら Web担当者に役立つ情報をサクッとゲット!

人気記事トップ10(過去7日間)

今日の用語

DX
Digital Transformationの略。企業におけるデジタル化・電子化 ...→用語集へ

インフォメーション

RSSフィード


Web担を応援して支えてくださっている企業さま [各サービス/製品の紹介はこちらから]