アクセス修飾子(Access Modifier)とは?
アクセス修飾子とは、クラスの 変数やメソッドがどこから使えるか(アクセスできる範囲) を指定するキーワード。
オブジェクト指向プログラミングで重要な概念で、データを守りつつ必要な部分だけ公開する(カプセル化) ために使う。
特徴
- クラス内部・外部・継承先からのアクセスを制御できる
- 代表的な修飾子は public / private / protected / static
- クラス設計の安全性・保守性を高める
- 不必要に外部から触れられるのを防ぐ
public / private / protected / staticでできること
public(パブリック)
- クラスの 外部から直接アクセス可能
- 他のクラスや関数からも変数やメソッドを呼び出せる
- インスタンスを作れば誰でも利用できる
例(PHP)
class User {
public $name;
}
$user = new User();
$user->name = "Taro"; // 外部からアクセスOK
echo $user->name; // Taro
例(PHP)
private(プライベート)
- クラスの 内部からのみアクセス可能
- 外部や継承先のクラスからはアクセスできない
- データや処理を隠す(カプセル化)に使う
例(PHP)
class User {
private $password;
public function setPassword($pw) {
$this->password = $pw; // クラス内部からアクセスOK
}
}
$user = new User();
// $user->password = "123"; // NG(外部からアクセス不可)
$user->setPassword("123"); // OK(メソッド経由で設定)
protected(プロテクテッド)
- クラス内部からアクセス可能
- サブクラス(継承したクラス)からもアクセス可能
- クラス外の一般コードからはアクセスできない
- 「限定公開」や「継承で共有したい処理・データ」に便利
- private と public の中間の公開範囲
<?php
class Animal {
protected $type = "Mammal"; // protected 変数
protected function getType() { // protected メソッド
return $this->type;
}
}
class Dog extends Animal {
public function showType() {
return $this->getType(); // 継承先からアクセス可能
}
}
$dog = new Dog();
echo $dog->showType(); // Mammal
// echo $dog->type; // エラー(外部からはアクセス不可)
static(スタティック)
- インスタンスを作らなくても利用できる
- クラス全体で 共有できる変数やメソッド を作れる
ClassName::メソッド()のように呼び出せる
例(PHP)
class Counter {
public static $count = 0;
public function __construct() {
self::$count++;
}
public static function getCount() {
return self::$count;
}
}
$a = new Counter();
$b = new Counter();
echo Counter::getCount(); // 2(全インスタンスで共有される)
まとめ(比較表)
| キーワード | 読み方 | できること | アクセス範囲 | 代表的な用途 |
|---|---|---|---|---|
| public | パブリック | 外部からアクセス可能 | どこからでも | 外部に公開したい変数やメソッド |
| private | プライベート | クラス内部からのみアクセス可能 | 自分だけ | 外部に触れさせたくないデータ・メソッド |
| protected | プロテクテッド | クラス内部+サブクラスからアクセス可能 | 限定公開 | 継承関係で共通処理を使う場合 |
| static | スタティック | インスタンスを作らずに利用可能 / クラス全体で共有 | クラス全体 | カウンターや設定値、ユーティリティ関数 |