PHPのアクセス修飾子public, protected, privateの違い

PHPにも他のオブジェクト指向言語と同様に、クラスやメソッドにアクセス修飾子を指定することができます。アクセス修飾子を適切に設定することで、より安全性の高いプログラムとすることができます。

アクセス修飾子の違い

アクセス修飾子それぞれの意味は次のようなものです。

public

どこからでもアクセス可能です。アクセス修飾子がない場合は、publicを指定したものと同じになります。

protected

そのクラス自身と継承クラスからアクセス可能です。つまり非公開ですが、継承は可能となります。

private

同じクラスの中でのみアクセス可能です。非公開で継承クラスからもアクセス不可能となります。

サンプルコード

4つのメソッドを持つクラスを定義して、それぞれにアクセス修飾子をつけます。protectedの挙動を確かめるために継承クラスも用意します。

サンプルコード(Superクラス)

これは、privateとprotectedのメソッドにアクセスしようとしているのでエラーとなります。

次にSuperクラスを継承したSubクラスからメソッドにアクセスしてみます。

サンプルコード(Subクラス)

実行結果

どのアクセス修飾子を使うべきか

アクセス修飾子を指定せず、すべてをpublicにしてもプログラムの動作に支障はありません。

まずprivateにできないか考える

ですが、プログラムの安全性を高めるためには、privateにできるものはprivateにしたほうが良いでしょう。特にプロパティは、外部から変更されると困るというケースが多いです。

getter, setterメソッドをつくる

そのため、プロパティはprivateにして、プロパティを取得するメソッドと変更するメソッド(いわゆるgetter, setter)を作成し、そのメソッドでプロパティのバリデーションをするなどの手法が取られることが多いです。


イベント