回答編集履歴
1
編集
answer
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
- PHPにおいては,プロパティに型は指定できない一方,メソッドの引数には**「代入可能な型の制御」** **「代入可能なタイミングの制御」**を課すことができる。この時点でまず `public` ではなく `protected` または `private` を採用するメリットがある。
|
2
2
|
- ファクトリクラス・コンフィグクラス・シングルトンクラス等の一部のユースケースを除き,一般的にオブジェクトは**イミュータブル**であるほうが望ましいとされるため,Setterはむしろ使わないほうがいい。この考えに則る場合は,プロパティに設定すべき内容はSetterではなくConstructorで渡すようにする。後からプロパティを変更したい場合は, `setXXX` の代わりに `withXXX` という命名を使って,返り値に変更を反映した新しいオブジェクトを返すようにする。
|
3
|
-
- もしPHPにおいて,プロパティにJavaの`final`(Constructorでのみ代入を認めてそれ以降の変更は認めない)相当の制約を課すことが可能であるならGetterは
|
3
|
+
- もしPHPにおいて,プロパティにJavaの`final`(Constructorでのみ代入を認めてそれ以降の変更は認めない)相当の制約を課すことが可能であるなら,`public final` で宣言すればGetterは無くても済むが,そのような機能はないため結局のところ多くの場合はGetterが必要になる。また,取得のたびにリアルタイムな値を使って再計算するような場合もGetterが必要。
|
4
4
|
|
5
5
|
要するに,`protected`なプロパティとGetterをベースにして,Setterはどうしても必要なときだけ使う,が正解です。イミュータブルにしてもコーディングの生産性が落ちない(むしろ分かりやすくなって上がる)場合はイミュータブルを採用しましょう。
|
6
6
|
|