PHPフレームワークのSlim3のコードを読んでみたらなんとなく不変オブジェクトが何なのかわかってきたので備忘録として記事にします。
まず以下のクラスは不変オブジェクトをインスタンスします。
このクラスにはセッターがなく、代わりにwithメソッドが存在します。
このクラスをインスタンス化したオブジェクトのプロパティを変更したいと思ってもセッターがないので変更できませんね。
なので試しにwithメソッドで変更してみます。
<?php $immutable = new Immutable(); $immutable->withSome("any"); echo $immutable->getSome();
この場合、表示されるのはsomeです。
期待通りの値が表示されませんね。
不変オブジェクトではプロパティの値を変更したい場合、以下のように設定します。
<?php $immutable = new Immutable(); $any = $immutable->withSome("any"); echo $any->getSome();
この場合だと表示されるのはanyです。
こういうものを不変オブジェクトと呼ぶようです。
今のところ、インスタンス化したオブジェクトは変更させないようにしてwithメソッドでクローンしたオブジェクトでプロパティを変更できるようにする仕組みが不変オブジェクトなのかなあといった認識です。
まだ勉強途中なのでもしかすると間違っているかもしれません。
もし間違っていた場合、コメントにてご指摘頂けると幸いです。