ホームページ > バックエンド開発 > PHPチュートリアル > PHP OOP Part-Access 修飾子、カプセル化と継承

PHP OOP Part-Access 修飾子、カプセル化と継承

Mary-Kate Olsen
リリース: 2025-01-04 16:31:40
オリジナル
931 人が閲覧しました

PHP OOP Part-Access modifier, Encapsulation and Inheritance

このシリーズでは、PHP オブジェクト指向プログラミング (OOP) の基礎について説明します。コンテンツは連続したパートに編成され、それぞれが特定のトピックに焦点を当てます。初心者または OOP の概念に慣れていない場合、このシリーズは段階的にガイドできるように設計されています。このパートでは、PHP のアクセス修飾子、カプセル化、継承について説明します。一緒に PHP OOP を学ぶ旅を始めましょう!

PHP のアクセス修飾子とは何ですか?

アクセス修飾子は、クラスのプロパティとメソッドのアクセス レベルを制御するために使用されます。つまり、アクセス量などを制御します。PHP には、次の 3 種類のアクセス修飾子が用意されています。

  • パブリック: どこからでもアクセス可能。
  • protected: クラスとそのサブクラス内でのみアクセス可能です。
  • private: クラス内でのみアクセス可能です。

これらのアクセス修飾子を使用するには、プロパティまたはメソッドを定義する前に、キーワード public、protected、または private を使用してアクセス修飾子を宣言する必要があります。プロパティまたはメソッドにアクセス修飾子を指定しない場合、デフォルトでパブリックとみなされます。

コード例

class MyClass {
    public $publicVar;      // Accessible from anywhere
    protected $protectedVar; // Accessible from this class and subclass
    private $privateVar;     // Accessible from only this class

    public function publicMethod() {
        // Accessible from anywhere
    }

    protected function protectedMethod() {
        // Accessible from this class and subclass
    }

    private function privateMethod() {
        // Accessible from only this class
    }
}
ログイン後にコピー
ログイン後にコピー

これらのアクセス修飾子を使用すると、クラス内のカプセル化とセキュリティに密接に関係するクラスのデータと機能へのアクセスを制御できます。

カプセル化とは何ですか?

カプセル化は、プライバシーまたは情報セキュリティを確保するために新しいエンティティを作成するプロセスです。クラスにはさまざまなプロパティとメソッドを持つことができ、アクセス修飾子を使用して、クラスの外部でこれらのプロパティとメソッドにアクセスする方法を定義できます。簡単に言えば、カプセル化とは、クラスのデータと機能へのアクセスを制御することです。

カプセル化はさまざまなレベルで発生する可能性があります:

プロパティレベルのカプセル化

プロパティは、クラスのオブジェクトに関連付けられたクラスのデータ メンバーです。デフォルトでは、プロパティはパブリックですが、プライベートまたは保護されたアクセス修飾子を使用してプロパティを保護できます。これにより、外部コードからデータに直接アクセスできなくなります。この概念は、プロパティレベルのカプセル化として知られています。

メソッドレベルのカプセル化

メソッドは、インスタンス上で動作するクラスの関数または操作です。メソッドには、外部クラスから隠すことができる実装が多数含まれている場合があります。こうすることで、外部コードがメソッドを使用できるようになりますが、その内部実装にはアクセスできなくなります。これはメソッドレベルのカプセル化として知られています。

クラスレベルのカプセル化

このレベルでは、クラスのプロパティとメソッドはクラス内に安全に保存され、クラス外部からのそれらへの直接アクセスは制限されます。ただし、継承を通じてアクセスすることはできます。これはクラスレベルのカプセル化と呼ばれます。

これらとは別に、カプセル化は必要に応じて他のレベルで実装できます。

継承とは何ですか?

継承は、クラス (サブクラスまたは子クラスと呼ばれる) が別のクラス (スーパークラスまたは親クラスと呼ばれる) からプロパティとメソッドを継承するプログラミングの概念です。

簡単にするために、特定のプロパティとメソッドを持つクラスを考えてみましょう。別のクラスがこれらと同じプロパティとメソッドを必要とする場合、それらを書き換えるのではなく、元のクラスから新しいクラスにそれらを継承できます。この概念は継承と呼ばれ、その主な目的はコードを再利用し、コードの重複を避けることです。クラスが別のクラスから継承する場合:

  • 継承クラスはサブクラスまたは子クラスと呼ばれます。
  • 継承されたクラスは、スーパークラスまたは親クラスと呼ばれます。

コードの例を見てみましょう

コード例

class MyClass {
    public $publicVar;      // Accessible from anywhere
    protected $protectedVar; // Accessible from this class and subclass
    private $privateVar;     // Accessible from only this class

    public function publicMethod() {
        // Accessible from anywhere
    }

    protected function protectedMethod() {
        // Accessible from this class and subclass
    }

    private function privateMethod() {
        // Accessible from only this class
    }
}
ログイン後にコピー
ログイン後にコピー

上記の例では、Vehicle クラスが Car クラスと Bus クラスの両方に継承されていることがわかります。その結果、パブリックまたは保護としてマークされている Vehicle クラスのプロパティとメソッドには、これらのサブクラス内でアクセスできます。

マルチレベル継承とは何ですか?

マルチレベル継承とは、クラスが別のクラスから継承し、その後そのクラス自体が 3 番目のクラスに継承されるシナリオを指します。これにより、3 番目のクラスは、基本クラスと中間クラスの両方のプロパティとメソッド (パブリックまたは保護としてマークされた) にアクセスできるようになります。

class Vehicle
{
   public $name;
   public $color;

   public function start()
   {
      // start login
   }

   public function stop()
   {
      // stop login
   }
}

class Car extends Vehicle
{
   function __construct(string $name, string $color)
   {
      $this->name  = $name;
      $this->color = $color;
   }

   public function carInfo()
   {
      echo "Car name: $this->name\n";
      echo "Car color: $this->color\n";
   }
}

class Bus extends Vehicle
{
   function __construct(string $name, string $color)
   {
      $this->name  = $name;
      $this->color = $color;
   }

   public function busInfo()
   {
      echo "Bus name: $this->name\n";
      echo "Bus color: $this->color\n";
   }
}

$toyota = new Car('Toyota', 'Red');
$toyota->start();
$toyota->carInfo();
$toyota->stop();

$tesla = new Bus('Zip', 'Blue');
$tesla->start();
$tesla->busInfo();
$tesla->stop();
ログイン後にコピー

この例では、Vehicle クラスが Car クラスに継承され、最後に Car クラスが ElectricCar クラスに継承されています。結果として、これはマルチレベル継承が動作していることを示しています。

このレッスンで、ここで取り上げたトピックについての基本的な理解が得られたことを願っています。今日はここまでです。また次のレッスンでお会いしましょう。 ?

以上がPHP OOP Part-Access 修飾子、カプセル化と継承の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート