[Osaka/Yokohama] Looking for infrastructure/server side engineers!

[Osaka/Yokohama] Looking for infrastructure/server side engineers!

[Deployed by over 500 companies] AWS construction, operation, maintenance, and monitoring services

[Deployed by over 500 companies] AWS construction, operation, maintenance, and monitoring services

[Successor to CentOS] AlmaLinux OS server construction/migration service

[Successor to CentOS] AlmaLinux OS server construction/migration service

[For WordPress only] Cloud server “Web Speed”

[For WordPress only] Cloud server “Web Speed”

[Cheap] Website security automatic diagnosis “Quick Scanner”

[Cheap] Website security automatic diagnosis “Quick Scanner”

[Reservation system development] EDISONE customization development service

[Reservation system development] EDISONE customization development service

[Registration of 100 URLs is 0 yen] Website monitoring service “Appmill”

[Registration of 100 URLs is 0 yen] Website monitoring service “Appmill”

[Compatible with over 200 countries] Global eSIM “Beyond SIM”

[Compatible with over 200 countries] Global eSIM “Beyond SIM”

[If you are traveling, business trip, or stationed in China] Chinese SIM service “Choco SIM”

[If you are traveling, business trip, or stationed in China] Chinese SIM service “Choco SIM”

[Global exclusive service] Beyond's MSP in North America and China

[Global exclusive service] Beyond's MSP in North America and China

[YouTube] Beyond official channel “Biyomaru Channel”

[YouTube] Beyond official channel “Biyomaru Channel”

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

この記事がお役に立てば【 いいね 】のご協力をお願いいたします!
7
読み込み中...
7 票, 平均: 1.00 / 17
4,856
X facebook はてなブックマーク pocket
[2024.6.30 CentOS support ended] CentOS server migration solution

[2024.6.30 CentOS support ended] CentOS server migration solution

[2025.6.30 Amazon Linux 2 support ended] Amazon Linux server migration solution

[2025.6.30 Amazon Linux 2 support ended] Amazon Linux server migration solution

[Osaka/Yokohama] Actively recruiting infrastructure engineers and server side engineers!

[Osaka/Yokohama] Actively recruiting infrastructure engineers and server side engineers!

The person who wrote this article

About the author

anaesthesia

I joined the company as a new graduate in April 2022 and
currently belong to the system development department.Thank
you for your continued support!