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

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

ヒューマンリソシア株式会社はコラム「マジックメソッドを巡る旅 その2」を公開しました。
ほんのちょっぴり、前回からコードを変えて、とある事を確認してみましょう。

class hoge {
private function __construct() { // ここがpublicではなくてprivateになっている
echo “call hoge’s construct\n”;
}
}
//
$obj = new hoge();

「Fatal error: Call to private」のエラーが出たかと思います。
コンストラクタがprivateなので「呼ぼうと思ったけど呼べないや」で終了します。
クラスをnewさせないための、嫌がらせのような実装ですね………まて。

こちらですが、別に「使えないモノを伊達や酔狂でやっている」わけではなくて。
デザインパターンで言うところの「シングルトン(Singleton)パターン」の実装でよく用いられる方法になります。
「内部的にstaticな変数」を一緒に合わせまして、ざっくりとは、こんな風に実装をします。

class hoge {
private function __construct() {
}
public static function get_instance() {
static $obj = NULL;
if (NULL === $obj) {
$obj = new hoge();
}
//
return $obj;
}
}
//
$obj = hoge::get_instance();
$obj2 = hoge::get_instance();
//
var_dump($obj);
var_dump($obj2);

var_dumpを二つ重ねてるのは「2回以上とっても、ちゃんと同一のインスタンスを指してるよ」って
いうのを確認するためです。
恐らく

object(hoge)#1 (0) {
}
object(hoge)#1 (0) {
}

この続きは以下をご覧ください
http://resocia.jp/column/1752/

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

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

今日の用語

メールマーケティング
デジタルマーケティングの一種で、目的達成のためにEメール(電子メール)を用いてユ ...→用語集へ

連載/特集コーナーから探す

インフォメーション

RSSフィード


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