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

Human Resocia Co.,Ltd.

2015-10-02 09:00

ヒューマンリソシア株式会社はコラム「マジックメソッドを巡る旅 その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::は、最後に呼び出すとよいでしょう。

この続きは以下をご覧ください
(リンク »)
本プレスリリースは発表元企業よりご投稿いただいた情報を掲載しております。
お問い合わせにつきましては発表元企業までお願いいたします。

【企業の皆様へ】企業情報を掲載・登録するには?

御社の企業情報・プレスリリース・イベント情報・製品情報などを登録するには、企業情報センターサービスへのお申し込みをいただく必要がございます。詳しくは以下のページをご覧ください。

ZDNET Japan クイックポール

マイナンバーカードの利用状況を教えてください

NEWSLETTERS

エンタープライズコンピューティングの最前線を配信

ZDNET Japanは、CIOとITマネージャーを対象に、ビジネス課題の解決とITを活用した新たな価値創造を支援します。
ITビジネス全般については、CNET Japanをご覧ください。

このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]