【大阪 / 横浜】インフラ / サーバーサイドエンジニア募集中!

【大阪 / 横浜】インフラ / サーバーサイドエンジニア募集中!

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【圧倒的 低コスト】Oracle Cloud 構築・運用保守・監視サービス

【圧倒的 低コスト】Oracle Cloud 構築・運用保守・監視サービス

【WordPress専用】高速 クラウド / サーバー『WebSpeed』

【WordPress専用】高速 クラウド / サーバー『WebSpeed』

【低コスト】Wasabi オブジェクトストレージ 構築・運用サービス

【低コスト】Wasabi オブジェクトストレージ 構築・運用サービス

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【SNSアプリ開発】LINE カスタムアプリ開発サービス

【SNSアプリ開発】LINE カスタムアプリ開発サービス

【ECアプリ開発】Shopify カスタムアプリ開発サービス

【ECアプリ開発】Shopify カスタムアプリ開発サービス

【音声アプリ開発】Twilio カスタムアプリ開発サービス

【音声アプリ開発】Twilio カスタムアプリ開発サービス

【グローバル対応】北米リージョン・クラウド / サーバー サポート

【グローバル対応】北米リージョン・クラウド / サーバー サポート

【取材記事】サーバーサイド・バックエンドエンジニアを募集中

【取材記事】サーバーサイド・バックエンドエンジニアを募集中

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

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

この記事がお役に立てば【 いいね 】のご協力をお願いいたします!
4
読み込み中...
4 票, 平均: 1.00 / 14
37
facebook twitter はてなブックマーク
【大阪 / 横浜】インフラエンジニア / サーバーサイドエンジニア 積極採用中!

【大阪 / 横浜】インフラエンジニア / サーバーサイドエンジニア 積極採用中!

この記事をかいた人

About the author

ますい

2022年4月に新卒として入社し、
現在はシステム開発部に所属しています
よろしくお願いいたします!