などの疑問や悩みを解決してまいります。
アクセス修飾子とは
アクセス修飾子とは、クラスのプロパティやメソッドへのアクセス範囲を制御するためのキーワードです。
PHPには主にpublic
、private
、protected
の3種類のアクセス修飾子があります 。
これらを使い分けることで、オブジェクト指向プログラミングにおけるカプセル化を実現し、データの保護やクラスの責務を明確にすることができます。
public
public
修飾子が付けられたメンバは、クラスの外部からもアクセス可能です。
どこからでもアクセスできるため、他のオブジェクトやクラスから直接参照できます。
class PublicExample {
public $value = "I am public"; // publicメンバ
public function getValue() {
return $this->value; // publicメンバにアクセス
}
}
// 使用例
$example = new PublicExample();
echo $example->getValue(); // "I am public" と出力
protected
protected
修飾子が付けられたメンバは、同じクラス内およびそのクラスを継承したサブクラスからアクセス可能ですが、クラスの外部からはアクセスできません。
これにより、サブクラスに対して特定のデータやメソッドを隠すことができます。
class ProtectedExample {
protected $value = "I am protected"; // protectedメンバ
protected function getValue() {
return $this->value; // protectedメンバにアクセス
}
}
class ChildProtectedExample extends ProtectedExample {
public function displayValue() {
return $this->getValue(); // 子クラスからprotectedメンバにアクセス
}
}
// 使用例
$childExample = new ChildProtectedExample();
echo $childExample->displayValue(); // "I am protected" と出力
// 以下はサブクラス以外からアクセスしようとした場合
$example = new ProtectedExample();
// 直接アクセスしようとするとエラーが発生する
echo $example->value; // エラー: protectedプロパティにはクラス外部からアクセスできません
echo $example->getValue(); // エラー: protectedメソッドにはクラス外部からアクセスできません
private
private
修飾子が付けられたメンバーは、そのクラス内からのみアクセス可能で、サブクラスや外部クラスからはアクセスできません。
この修飾子を使用することで、クラス内部の実装を完全に隠蔽し、外部からの不正なアクセスを防ぐことができます。
class PrivateExample {
private $value = "I am private"; // privateメンバ
private function getValue() {
return $this->value; // privateメンバにアクセス
}
public function displayValue() {
return $this->getValue(); // 同じクラスからprivateメンバにアクセス
}
}
// 使用例
$privateExample = new PrivateExample();
echo $privateExample->displayValue(); // "I am private" と出力
// 以下はクラス外部からアクセスしようとした場合
echo $privateExample->value; // エラー: privateプロパティにはクラス外部からアクセスできません
echo $privateExample->getValue(); // エラー: privateメソッドにはクラス外部からアクセスできません
アクセス修飾子を使用しない場合
アクセス修飾子を指定しない場合、PHPではデフォルトでプロパティやメソッドはpublic
として扱われます。
つまり、以下のように書くことも可能です。
class Example {
$value = "I am public"; // デフォルトはpublic
function getValue() {
return $this->value; // デフォルトはpublic
}
}
// 使用例
$example = new Example();
echo $example->getValue(); // "I am public" と出力
カプセル化の概念
カプセル化とは、オブジェクト指向プログラミングにおいて、プロパティやメソッドをクラス内部に隠し、外部から直接アクセスできないようにする概念です。
アクセス修飾子によって外部からのアクセス範囲が制御され、クラス外からは公開されたインターフェースを通じてのみデータにアクセスできるため、不正な操作や意図しない変更を防ぐことができます。
まとめ
アクセス修飾子は以下のように比較ができます。
アクセス修飾子 | アクセスできる場所 | サブクラスからのアクセス | クラス外部からのアクセス | 主な用途 |
---|---|---|---|---|
public | クラス内部・クラス外部すべて | 可能 | 可能 | 外部から自由にアクセスさせたい機能 |
private | 同じクラス内のみ | 不可 | 不可 | クラス内でのみ使用されるデータや機能を保護 |
protected | 同じクラスおよび継承されたサブクラス内 | 可能 | 不可 | 継承関係にあるクラスで共有したいデータや機能 |
public
、private
、protected
のアクセス修飾子の比較アクセス修飾子を使用することで、クラスの外部から意図しないメンバの変更や不正な操作を防ぐことができるカプセル化の概念を実現することができます。
それぞれのアクセス修飾子の効力を理解し、PHPを使った開発に活かしていただけると幸いです!