エンジニアのひよこ_level10

毎日更新してた人。たまに記事書きます。

【デザパタ自作】イミュータブルパターン(インスタンス内包対応)【266日目】

前の記事

willow710kut.hatenablog.com

作ったプログラム

github.com

この記事は?

イミュータブルパターンの概要を聞いて、自作しようってお話。

前回からの内容

setする時に、新しくインスタンスを返すのはいいけど、
インスタンス(a1)の中にインスタンスの参照(b)を持ってたら、
新しく作ったインスタンス(a2)の中のインスタンスの参照は(b)のままじゃない?

やったこと

immutable-advanceディレクトリ参照。

インスタンスの参照を受け取ったら、cloneしてから保存する。

    public function __construct($str, $num, $object)
    {
        $this->str = $str;
        $this->num = $num;
        $this->object = clone $object;
    }

これ、第三引数しかcloneしてなくない?

はい、そのとおりですううう

一旦、理解のために最低限のものを作った感じです。他は、数値や文字列なのでcloneしてないです。

でも、これですべてのインスタンスが、内包しているインスタンスに対して、別なインスタンスを持つように作れました。

参考記事

PHP: オブジェクトのクローン作成 - Manual

次回やること

イテレーターパターンやります!チョー有名なやつだね。

さて、まだコード一切書いてないので、これから試行錯誤していきます・・・!

while (hasNext) {
    $it->next();
}

で動かせるコードを頑張って書きます。