「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > PHP OOP のアクセス修飾子について: パブリック、プロテクト、プライベート

PHP OOP のアクセス修飾子について: パブリック、プロテクト、プライベート

2024 年 11 月 8 日に公開
ブラウズ:963

Understanding Access Modifiers in PHP OOP: Public, Protected, and Private

PHP オブジェクト指向プログラミング (OOP) では、アクセス修飾子はクラスのプロパティとメソッドの可視性を制御します。 PHP の主なアクセス修飾子は、public、protected、および private です。

この記事では、これらのアクセス修飾子の目的と使用法を説明し、PHP OOP でそれらを効果的に適用する方法を説明します。

1.パブリックアクセス修飾子

  • キーワード: パブリック
  • 可視性: クラス内、クラス外、派生クラスなど、どこからでもアクセスできます。
  • ユースケース: あらゆるコンテキストからアクセスできるプロパティまたはメソッドには public を使用します。

例:

class User {
    public $name = "John";

    public function greet() {
        return "Hello, " . $this->name;
    }
}

$user = new User();
echo $user->greet();  // Output: Hello, John

この例では、プロパティ $name とメソッド welcome() の両方がパブリックなので、クラスの外部から直接アクセスできます。

2.保護されたアクセス修飾子

  • キーワード: 保護されています
  • 可視性: クラス自体内およびサブクラス (子クラス) からアクセスできますが、クラスの外部からはアクセスできません
  • ユースケース: protected を使用すると、派生クラスが特定のプロパティまたはメソッドにアクセスできるようにしながら、外部コードからは隠蔽されます。
正しいアクセスの例:

クラス人 { 保護された $age = 30; 保護された関数 getAge() { $this->age を返します。 } } クラス Employee は Person { を拡張します パブリック関数 showAge() { $this->getAge() を返します。 // 正: サブクラス内の保護されたメソッドにアクセスします } } $employee = 新しい従業員(); echo $employee->showAge(); // 出力: 30
class Person {
    protected $age = 30;

    protected function getAge() {
        return $this->age;
    }
}

class Employee extends Person {
    public function showAge() {
        return $this->getAge();  // Correct: Accesses protected method within a subclass
    }
}

$employee = new Employee();
echo $employee->showAge();  // Output: 30
この例では、getAge() は保護されたメソッドであり、Person のサブクラスである Employee クラス内でアクセスできます。

エラーのある例:

クラス人 { 保護された $age = 30; 保護された関数 getAge() { $this->age を返します。 } } $person = 新しい人(); echo $person->getAge(); // エラー: 保護されたメソッド Person::getAge() にアクセスできません
class Person {
    protected $age = 30;

    protected function getAge() {
        return $this->age;
    }
}

class Employee extends Person {
    public function showAge() {
        return $this->getAge();  // Correct: Accesses protected method within a subclass
    }
}

$employee = new Employee();
echo $employee->showAge();  // Output: 30

エラー メッセージ: 致命的なエラー: キャッチされませんでしたエラー: 保護されたメソッド person::getAge() にアクセスできません

この場合、保護されたメソッド getAge() に Person のインスタンスから直接アクセスしようとすると、エラーが発生します。これは、保護されたメソッドにはクラスの外部からアクセスできないためです。

3.プライベートアクセス修飾子

  • キーワード: プライベート
  • 可視性: 定義されているクラス内でのみアクセス可能です。 サブクラスまたは外部コードからはアクセスできません
  • ユースケース: プライベートを使用して、派生クラスを含むクラス外のコードからプロパティまたはメソッドを非表示にします。
正しいアクセスの例:

クラス BankAccount { プライベート $balance = 1000; プライベート関数 getBalance() { $this->balance を返します。 } パブリック関数 showBalance() { $this->getBalance() を返す; // 正: 同じクラス内のプライベート メソッドにアクセスします } } $account = 新しい BankAccount(); echo $account->showBalance(); // 出力: 1000
class Person {
    protected $age = 30;

    protected function getAge() {
        return $this->age;
    }
}

class Employee extends Person {
    public function showAge() {
        return $this->getAge();  // Correct: Accesses protected method within a subclass
    }
}

$employee = new Employee();
echo $employee->showAge();  // Output: 30
この例では、getBalance() メソッドはプライベートであるため、BankAccount クラス内でのみアクセスできます。 showBalance() メソッドはパブリックであり、プライベート getBalance().

に間接的にアクセスするために使用できます。

エラーのある例:

クラス BankAccount { プライベート $balance = 1000; プライベート関数 getBalance() { $this->balance を返します。 } } $account = 新しい BankAccount(); echo $account->getBalance(); // エラー: プライベート メソッド BankAccount::getBalance() にアクセスできません
class Person {
    protected $age = 30;

    protected function getAge() {
        return $this->age;
    }
}

class Employee extends Person {
    public function showAge() {
        return $this->getAge();  // Correct: Accesses protected method within a subclass
    }
}

$employee = new Employee();
echo $employee->showAge();  // Output: 30

エラー メッセージ: 致命的なエラー: キャッチされないエラー: プライベート メソッド BankAccount::getBalance() にアクセスできません

この場合、プライベート メソッドにはクラスの外部からアクセスできないため、BankAccount のインスタンスからプライベート メソッド getBalance() に直接アクセスしようとするとエラーが発生します。

サブクラスにエラーがある例:

クラス BankAccount { プライベート $balance = 1000; プライベート関数 getBalance() { $this->balance を返します。 } } class SavingsAccount extends BankAccount { パブリック関数 showBalance() { $this->getBalance() を返す; // エラー: プライベート メソッド BankAccount::getBalance() にアクセスできません } } $ Savings = 新しい SavingsAccount(); echo $ Savings->showBalance();
class Person {
    protected $age = 30;

    protected function getAge() {
        return $this->age;
    }
}

class Employee extends Person {
    public function showAge() {
        return $this->getAge();  // Correct: Accesses protected method within a subclass
    }
}

$employee = new Employee();
echo $employee->showAge();  // Output: 30

エラー メッセージ: 致命的なエラー: キャッチされないエラー: プライベート メソッド BankAccount::getBalance() にアクセスできません

ここでは、プライベート メソッド getBalance() は SavingsAccount のようなサブクラスにもアクセスできません。これは、プライベート メソッドがその定義クラスの外ではアクセスできないことを示しています。

4.アクセス修飾子の概要

修飾子クラス内派生クラス授業外はいはいはいはいはいいいえはいいいえいいえ
公共
保護されています
プライベート

5.ベストプラクティス

  • publicは必要なものだけを公開するために慎重に使用してください。カプセル化を優先し、パブリック メソッド経由で機能を公開します。
  • protectedを使用すると、サブクラスが外部コードから隠しながら必要なプロパティまたはメソッドにアクセスできるようになります。
  • private を使用してクラス内部を完全にカプセル化し、外部クラスまたは派生クラスからのアクセスを防ぎます。

結論

PHP のアクセス修飾子 (public、protected、private) は、OOP での可視性とカプセル化を管理するメカニズムを提供します。これらの修飾子を正しく理解して適用することで、より安全で保守しやすいコードを作成できます。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/ialaminpro/ Understanding-access-modifiers-in-php-oop-public-protected-and-private-5bah?1 侵害がある場合は、study_golang@163 までご連絡ください。 .comを削除してください
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3