PHPには、public、private、protectedの3つのアクセス修飾子があり、これらはクラスのプロパティやメソッドに対するアクセス制限を設けるために使用されます。それぞれ異なるアクセスレベルを定義し、クラスの設計と使用を適切に行うために重要な役割を果たします。
目次
- public
- private
- protected
- アクセス修飾子の違いと使用例
- アクセス修飾子の適切な使用方法
1. public
定義
クラスのプロパティやメソッドがクラスの外部からもアクセス可能になる。
使用ケース
クラスの機能を外部に公開し、外部からの利用を容易にするために使用。
例
class MyClass {
public $publicProperty = 'I am public';
public function publicMethod() {
echo 'This is a public method';
}
}
$instance = new MyClass();
echo $instance->publicProperty; // 出力: I am public
$instance->publicMethod(); // 出力: This is a public method
2. private
定義
クラスのプロパティやメソッドが、そのクラス内部からのみアクセス可能になる。
使用ケース
クラスの内部状態を保護し、外部からの直接的なアクセスを防ぐために使用。
例
class MyClass {
private $privateProperty = 'I am private';
private function privateMethod() {
echo 'This is a private method';
}
public function accessPrivate() {
echo $this->privateProperty; // OK
$this->privateMethod(); // OK
}
}
$instance = new MyClass();
// echo $instance->privateProperty; // エラー
// $instance->privateMethod(); // エラー
$instance->accessPrivate(); // 出力: I am private This is a private method
3. protected
定義
クラスのプロパティやメソッドが、そのクラス自体、及びそのクラスを継承したサブクラスからアクセス可能になる。
使用ケース
クラスの内部状態を保護しつつ、継承による拡張を可能にするために使用。
例
class MyClass {
protected $protectedProperty = 'I am protected';
protected function protectedMethod() {
echo 'This is a protected method';
}
}
class SubClass extends MyClass {
public function accessProtected() {
echo $this->protectedProperty; // OK
$this->protectedMethod(); // OK
}
}
$instance = new SubClass();
$instance->accessProtected(); // 出力: I am protected This is a protected method
// echo $instance->protectedProperty; // エラー
// $instance->protectedMethod(); // エラー
4. アクセス修飾子の違いと使用例
- public: 外部からアクセス可能。クラスのインスタンスを通じて、外部から直接プロパティにアクセスしたり、メソッドを呼び出したりできます。
- private: クラス内部からのみアクセス可能。クラスの外部からはアクセスできず、クラスの内部からのみアクセス可能です。
- protected: クラス自体およびそのサブクラスからアクセス可能。クラスの外部からはアクセスできず、クラスの内部から、及び継承したサブクラスからのみアクセス可能です。
5. アクセス修飾子の適切な使用方法
- public: クラスの機能を外部に公開し、他のクラスやコードから直接使用できるようにする場合に使用します。例えば、APIのエンドポイントとして機能するメソッドや、設定可能なプロパティなどです。
- private: クラスの内部でのみ使用されるメソッドやプロパティに使用します。これにより、外部からの不正なアクセスを防ぎ、クラスの内部状態を保護します。例えば、計算や処理の中間ステップとして使用するメソッドなどです。
- protected: クラスを継承するサブクラスで使用されるメソッドやプロパティに使用します。クラスの内部状態を保護しつつ、サブクラスでの拡張を可能にします。例えば、サブクラスで共通して使用されるロジックやデータを保持するプロパティなどです。
これらのアクセス修飾子を適切に使用することで、クラスの内部状態を保護しつつ、外部からのアクセスを制御することができます。これにより、クラスの設計と使用を適切に行うために重要な役割を果たします。private と protected が少し似ていますが、protectedは継承したサブクラスからもアクセス可能である点が異なります。