【PHP】アクセス修飾子について

Pocket

>クラスの使い方について(目次ページ)

前回の記事でクラス作成の基本形を学びました。これまで学んできた中で「public」というアクセス修飾子何度か使用しました。
今回はこのアクセス修飾子について記述していきます。

アクセス修飾子とは?

アクセス修飾子とは、クラス内の「メンバ変数」や「メンバメソッド」に、どこからアクセスすることができるかを定義する構文です。
アクセス権ともいい、「public」、「private」、「protected」の三種類があります。

public

「public」はクラス内、クラス外からどこからでもアクセス可能にするアクセス修飾子です。具体例を見てみましょう。

インスタンス化した「$tanaka」から「$tanaka->denote_hp();」で$tanakaのHPを表示、「$suzuki」から「$suzuki->denote_mp();」で$suzukiのMPを表示するメソッドを表示しようとしています。

 

class-step5-1

 

正常に表示されました。「public」で定義しているので、どこからでもアクセス可能、すなわち「public」で定義したプロパティやメソッドはどこからでも呼び出しや書き換えが可能になります。

private

先程のコードの「public」の部分を「private」に変えて同じ処理を実行してみます。

実行結果は以下の通りです。

class-step5-2

 

「private」に変更した途端エラーになりました。アクセス修飾子「private」は同じクラス内からでしかアクセスすることができなくする修飾子です。外部からの呼び出しもできなくなりますが同じクラス内から別のメソッドで呼び出すことは可能になります。
文にすると少々分かりにくいですが、クラス内に以下の構文を追記してみます。

同じクラス内で「private」で定義した「denote_hp();」というメソッドを「public function denote_hp_pub();」で呼び出せるようにしています。同じように「denote_mp();」も「private」で定義されていますが、「public function denote_mp_pub();」で呼び出せるようにしています。

外部から、メソッド「public function denote_hp_pub();」と「public function denote_mp_pub();」を呼び出してみます。実行結果は下記画像の通です。

class-step5-3

正常に動作しました。「private」のアクセス修飾子を持ったメソッドは直接外部から呼び出すことはできませんが、同じクラスのメソッドからなら呼び出せることが分かりました。
これだけみるとなんのためにわざわざ「private」を設定し、別のメソッドから呼び出す意味が分かりませんよね。

「private」を設定する意味

「private」は特に変更されたくない値や数式に対して設定します。「public」は外部から誰でも呼び出すことが可能になるアクセス修飾子です。故に値の書き換えが誰にでも可能になるのです。
値をむやみに書き換えて欲しくない場合などに対し、「private」を挟むことでこれを防止することができるのです。

protected

「protected」の役割は「private」に似ていますが少しだけ挙動が違います。「private」が「同じクラス内からアクセス可能」に対し、「protected」は「同じクラス内から、または子クラスからのアクセスが可能」というアクセス修飾になります。

まとめ

  • アクセス修飾子とは、クラス内の「メンバ変数」や「メンバメソッド」に、どこからアクセスすることができるかを定義する構文である
  • 「public」はクラス内、クラス外からどこからでもアクセス可能にする
  • 「private」は同じクラス内からでしかアクセスすることができなくする
  • 「protected」は同じクラス内から、または子クラスからのアクセスが可能にする

 

エッグ

シェアする

コメントを残す

メールアドレスが公開されることはありません。

コメントする