public function の public ってなに!?【アクセス修飾子】
こんにちは!システム開発部のますいです!
今回は public function の public やそのお仲間たちについて紹介していきたいと思います。
よろしくお願いいたします!
最初に
まず public function の public とはアクセス修飾子と呼ばれるもので、
アクセス修飾子とは、プロパティ(クラス内で定義された変数)やメソッド(クラス内で定義された関数)を使用する時にどのクラスからでも呼び出せるようにしたり、特定のクラスからしか呼び出せないようにしたりするものです。
クラスとは...
このブログではクラスという単語がしばしば出てくるのですが、ここで書いているクラスとはオブジェクト指向のクラスのことで、プロパティやメソッドをひとまとめにした塊のことを言います。
アクセス修飾子の種類
アクセス修飾子には public private protected の三種類存在しています。
それぞれ日本語訳とセットにしてみると、名前と機能が一致して覚えやすいかもしれません。
以下でその三つについて解説していきます。
public
// パブリックプロパティの定義 public $variable // パブリックメソッドの定義 public function method() { // 処理 }
なにか知らないけどとりあえず punlic をつけておくみたいな方もいらっしゃるのでは無いでしょうか。(何年か前の僕がそうでした、、)
この public ですが日本語の意味的には公開、公的みたいな意味があって、 public で定義したプロパティやメソッドはどのクラスからでも呼び出せるようになります。
そのため、別のクラスからも呼び出したいものは public で定義しています。
また、アクセス修飾子なしの場合も php では public なメソッドとして扱われます。
ただし、プロパティにアクセス修飾子をつけなかった場合はエラーになってしまうため注意が必要です。
// パブリックメソッドの定義 function method() { // 処理 }
protected
// プロテクテッドプロパティの定義 protected $variable // プロテクテッドメソッドの定義 protected function method() { // 処理 }
最後の protect は日本語では保護する、防ぐみたいな意味で、今回は protected なので保護されたとか防がれたというような意味になります。
この protected にはオブジェクト指向の継承と呼ばれる概念が関わってきます。
オブジェクト指向では継承するクラスを親クラス、継承先のクラスを子クラスと呼んでいて親子関係の中で保護するとか守るみたいな意味になりそうな気がしてます🤔
protected で定義したものは基本的には別クラスから呼び出すことができません。ですが、一つだけ例外が存在しています。それが継承で、継承を行った場合のみその関係の中で呼び出せるようになります。
複数のクラスに同じプロパティやメソッドを持たせたい場合に継承は使われていてその関係の中でのみ呼び出したいものは protected で定義しているみたいな感じで使われていると思います。
private
// プライベートプロパティの定義 private $variable // プライベートメソッドの定義 private function method() { // 処理 }
この private は日本語では私的とか非公開みたいな意味があって、
private で定義したプロパティやメソッドは public とは違い別クラスから呼び出せず、 private で定義したものがあるクラスからしか呼び出すことができません。
このアクセス修飾子は先程の protected のような例外(継承していれば呼び出すことができる)は存在せず完全にその定義したクラスだけでしか呼び出せないプロパティやメソッドになります。
なので、そのクラスでしか使いたくないプロパティやメソッドで、別のクラスから呼び出されたくないものなどは private で定義されたりします。
まとめ
以上がアクセス修飾子と呼ばれるものの解説になっています。
まとめると、public がどこからでも呼び出せて、protected は継承の関係にあるクラスからのみ呼び出せて、private は定義したクラス内からのみ呼び出せるというものになっています。
以下それぞれのアクセス修飾子に関してまとめた表を置いておきます。
public | protected | private | |
定義したクラスから呼び出せる | ○ | ○ | ○ |
継承を行った子クラスからアクセスできる | ○ | ○ | ✕ |
全く別のクラスからアクセスできる | ○ | ✕ | ✕ |
途中の protected の説明の際に継承という概念が出てきて難しくなった感じが若干ありましたが、
継承についても後々書いていこうと思っていますので、その際は読んでみていただければと思います!
ここまで読んでくださってありがとうございました🙇♂️
最後に
僕が所属するシステム開発のサービスサイト「SEKARAKU Lab(セカラク ラボ)」を開設しました。
ビヨンドは、サーバーの設計・構築から運用までをワンストップでお任せいただけますので、サーバーサイド開発でお困りの方はお気軽にお問い合わせください。
● SEKARAKU Lab:https://sekarakulab.beyondjapan.com