PHPのprivate・protected・publicの違いを初心者向けに解説!アクセス修飾子の使い方まとめ
生徒
「PHPのクラスで、privateとかpublicとか見かけたんですけど、あれって何を意味してるんですか?」
先生
「それは“アクセス修飾子(しゅうしょくし)”といって、クラスの中の変数や関数に誰がアクセスできるかを決めるルールのことなんです。」
生徒
「難しそうに聞こえますけど、どんな違いがあるんですか?」
先生
「では、private・protected・publicの3つの違いを、初心者にも分かりやすく順番に見ていきましょう!」
1. アクセス修飾子とは?
アクセス修飾子とは、PHPでクラスを作るときに、その中の「変数」や「関数(メソッド)」が外から使えるかどうかを決める設定のことです。
たとえば、「家の中にある引き出しに誰が触ってもいいのか?」「自分だけが使えるのか?」というイメージです。
アクセス修飾子には次の3種類があります:
public(パブリック):誰でも使える(クラスの外からでもOK)protected(プロテクテッド):自分と子ども(継承先のクラス)だけ使えるprivate(プライベート):自分だけしか使えない(完全に秘密)
2. public:誰でも使える公開された情報
publicは、もっとも開かれたアクセス修飾子です。クラスの外からでも自由にアクセスできます。
たとえば、テレビのチャンネルボタンのように、誰でも押して使えるイメージです。
<?php
class Car {
public $color = "赤";
public function drive() {
echo "車を運転しています";
}
}
$myCar = new Car();
echo $myCar->color; // 外からアクセスできる
$myCar->drive(); // 外から呼び出せる
?>
publicが付いているプロパティ(変数)やメソッド(関数)は、クラスの外からも使うことができます。
3. private:クラスの中だけで使える
privateは、完全にクラスの中だけで使うためのアクセス修飾子です。外からは一切アクセスできません。
これは「金庫の中のカギ」に似ています。持っている本人(クラス)しか開けられません。
<?php
class User {
private $password = "secret123";
private function showPassword() {
echo $this->password;
}
public function check() {
$this->showPassword(); // クラス内ではOK
}
}
$user = new User();
$user->check(); // OK
//$user->showPassword(); // NG(外からはアクセスできない)
//echo $user->password; // NG(外からは見えない)
?>
クラスの中では自由に使えますが、外からは呼び出そうとしてもエラーになります。
4. protected:継承先のクラスでも使える
protectedは、privateと似ていますが、子クラス(継承したクラス)からもアクセスできるのがポイントです。
たとえば「家族だけが入れる部屋」というイメージで、自分(親クラス)と子ども(子クラス)だけが使える場所です。
<?php
class Animal {
protected $name = "ライオン";
protected function roar() {
echo "がおー!";
}
}
class Zoo extends Animal {
public function show() {
echo $this->name; // 子クラスからアクセスOK
$this->roar(); // 子クラスから呼び出しOK
}
}
$z = new Zoo();
$z->show(); // OK
//$z->roar(); // NG(外からはダメ)
?>
protectedは、クラスを継承して使うときにとても便利です。
5. アクセス修飾子の使い分けのコツ
初心者のうちは、すべてpublicにしたくなるかもしれませんが、次のように使い分けると良いです。
- 外部からも使ってほしい情報や処理 →
public - 外には出したくない内部データ →
private - 継承して使う設計にしたいとき →
protected
最初はprivateで作っておいて、必要になったらpublicに変更するスタイルが安全です。
6. オブジェクト指向プログラミングとアクセス修飾子
PHPでは「オブジェクト指向プログラミング」という考え方でコードを書くことが増えてきています。アクセス修飾子は、この中でとても重要な役割を持ちます。
たとえば、情報を隠す(カプセル化)というテクニックで、外部から触ってほしくない部分をprivateで守ることができます。
こうすることで、思わぬバグやトラブルを防ぐことができるのです。
まとめ
アクセス修飾子の基本を振り返ろう
ここまで、PHPのクラスで使われる public・protected・private という三つのアクセス修飾子について学んできました。
アクセス修飾子は、クラスの中にある変数や関数を「どこから使ってよいのか」「どこまで公開するのか」を決めるための、とても重要な仕組みです。
初心者のうちは「とりあえず動けばいい」と思って、すべてを public にしてしまいがちですが、
それでは後からコードが大きくなったときに、思わぬ場所から値が書き換えられてしまったり、修正が難しくなったりします。
アクセス修飾子を正しく使うことは、読みやすく、壊れにくいPHPプログラムを書く第一歩だと言えます。
public・protected・privateの役割整理
public は、クラスの外からも自由に使える公開された情報です。 画面表示に使う処理や、他のプログラムから呼び出して使うメソッドなどに向いています。
private は、クラスの中だけで使うための修飾子です。 パスワードや内部計算用のデータなど、外から直接触られたくない情報を守る役割があります。
protected は、自分自身と継承した子クラスだけが使える修飾子です。 親クラスの仕組みを引き継ぎながら、機能を拡張したい場合にとても便利です。
アクセス修飾子を意識した簡単なサンプル
<?php
class Account {
private $balance = 1000;
public function showBalance() {
echo "残高は" . $this->balance . "円です";
}
protected function addMoney($amount) {
$this->balance += $amount;
}
}
class SavingsAccount extends Account {
public function deposit($money) {
$this->addMoney($money);
$this->showBalance();
}
}
$account = new SavingsAccount();
$account->deposit(500);
?>
この例では、残高という大切な情報を private で守りつつ、
継承したクラスからは protected のメソッドを使って安全に処理しています。
外からは必要な操作だけを public メソッドとして公開している点がポイントです。
初心者が意識したい設計の考え方
PHPのクラス設計では、「外に見せる部分」と「中だけで使う部分」をしっかり分けることが大切です。 アクセス修飾子を使うことで、クラスの使い方が自然と決まり、間違った使い方を防ぐことができます。
はじめは少し難しく感じるかもしれませんが、
「まずは private で作って、必要なものだけ public にする」
という考え方を覚えておくと、実務でも役立ちます。
生徒
「最初は public と private の違いがよく分からなかったですけど、
触っていい場所とダメな場所を分ける考え方だと分かってきました。」
先生
「いい理解ですね。アクセス修飾子は、プログラムを守るためのルールなんです。 特にPHPではクラスを使う場面が増えるので、とても大切になりますよ。」
生徒
「protected は、継承するときのための修飾子なんですね。
親と子だけが使えるっていうイメージが分かりやすかったです。」
先生
「その通りです。アクセス修飾子を意識してクラスを書くと、 読みやすくて安全なPHPコードになります。 これからクラスを書くときは、ぜひ使い分けを考えてみてください。」
全体を通して、PHPのアクセス修飾子の役割と使い方を理解できたはずです。 この知識は、オブジェクト指向プログラミングを学ぶうえでの土台になります。 ぜひ実際にコードを書きながら、少しずつ身につけていきましょう。