※この記事は読者によって投稿されたユーザー投稿のため、編集部の見解や意向と異なる場合があります。 また、編集部はこの内容について正確性を保証できません。
ヒューマンリソシア株式会社はコラム「マジックメソッドを巡る旅 その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/

人気記事トップ10

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