株式会社音生's job postings
カプセル化の1つの重要な手法として、クラス内のメンバを修飾子により、アクセス可否をコントロールします。カプセル化はクラスを設計する上で、セキュリティ的なことを含めて最も重要なポイントです。
PHPにおいても、例えばゲッター/セッターはカプセル化を実現するための手法です。例えばJavaScriptなんかではゲッター、セッター構文が用意されています。PHPにもマジックメソッドが用意されていますね。ところが以下のように、セッターの引数が問題です。
public void __set ( string $name , mixed $value )
タイトル画像(左)のようなことができてしまうので、ちょっと困りますね。そこで、Javaのように自分で命名してみます(タイトル画像(中央))。
setTitle(引数)
getTitle()
PHPでは型の制約がないため、Javaなんかの言語に比べてもpublicなプロパティやメンバの危険性は遥かに大きいのではないでしょうか。PHPでもし型の制約があるなら、アクセサから例えば変数で数値型で定義すれば文字列型が代入されるようなことにはなりませんが、PHPではできてしまうことがあり得ます。だから検査する処理を挟む必要があります。このような場合に、セッタ/ゲッタメソッドという手法が1つの選択枠に入るような気がします。とにかく直接データにアクセスされると困ります。