アクセス修飾子まとめ

アクセス修飾子(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(プロテクテッド)

  • クラス内部からアクセス可能
  • サブクラス(継承したクラス)からもアクセス可能
  • クラス外の一般コードからはアクセスできない
  • 「限定公開」や「継承で共有したい処理・データ」に便利
  • privatepublic の中間の公開範囲
<?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スタティックインスタンスを作らずに利用可能 / クラス全体で共有クラス全体カウンターや設定値、ユーティリティ関数
タイトルとURLをコピーしました