カプセル化とは、データを隠蔽し、直接アクセスすることを防ぐことです。
例えば、以下のようにプロパティをpublicにし、そのまま値を取得したとしましょう。
<?php
class Food {
public $name;
}
$food = new Food;
echo $food->name . "は果物で、" . $food->name .
"は甘酸っぱく" . $food->name . "は300円で売っている";
では、クライアントの要望で、食べ物の名前には全て「」をつけて欲しいという仕様変更があったとします。
<?php
echo "「" . $food->name . "」" . "は果物で、" . "「" . $food->name . "」" .
"は甘酸っぱく" . "「" . $food->name . "」" . "は300円で売っている";
このように三箇所全てに「」をつけなければなりません。ではこれを
<?php
class Food {
private $name;
public funciton getName() {
return $this->name;
}
}
echo $food->getName() . "は果物で、" . $food->getName() .
"は甘酸っぱく" . $food->getName() . "は300円で売っている";
と作っておけば
<?php
class Food {
private $name;
public funciton getName() {
return "「" . $this->name . "」";
}
}
のように一箇所だけ変更すれば、一箇所の変更で対応できます。企業向けのアプリケーションでは、数百枚のファイル中の数箇所から一つの変数を参照することが一般的です。こういった場合、仕様変更に対応するのは非常に困難となります。
プロパティ$foodをpublicにしておくと、プログラマが$foodに直接アクセスしてしまう恐れがあるため、仕様変更がおこった場合、直接アクセスした箇所だけ変更が適用されなくなってしまいます。
よって、プロパティは基本的に全てprivate、またはprotectedに設定します。
読み込み用のメソッド名は、
getプロパティ名
書き込み用のメソッド名は
setプロパティ名
とします。
こういった単純なゲット、セットだけをするメソッドをアクセサメソッドといいます。
では、次回は、実践的な使い方について説明します。



