1.カプセル化とは?
外部からデータや手続きの詳細を隠蔽すること、アクセスできないようにすることを「カプセル化」と言います。
PHPでは、privateなどを用いてクラスの外から変数やメソッドにアクセスできないようにすることで、「カプセル化」を実現しています。
以下で実際のコードを見てみましょう。
2.カプセル化がされていないPHPのコード
//カプセル化されていないコード
class hoge {
public function pub_func() {
echo "public";
}
}
$obj = new hoge();
$obj->pub_func();
//出力結果
public
上記では、修飾子publicでメソッドを定義しています。
この時はclassの外でメソッドを呼び出しても、メソッドが実行されることが
わかります。
クラスの外からメソッドにアクセスできることから、このコードはカプセル化がされていないことがわかります。
3.カプセル化がされているPHPのコード
//カプセル化されているコード
class hoge {
private function pri_func() {
echo "private";
}
}
$obj = new hoge();
$obj->pri_func();
//出力結果
PHP Fatal error: Uncaught Error: Call to private method hoge::pri_func() from global scope
上記では、修飾子privateでメソッドを定義しています。
この時はclassの外でメソッドを呼び出しても、「Call to private method」というエラーになってしまいます。
このようにprivateで定義されたメソッドに、クラス外でアクセスすることはできません。
これではクラスの外からアクセスできない状態なため、「カプセル化」されているといえます。