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

PHPz
リリース: 2024-09-11 06:33:54
オリジナル
1006 人が閲覧しました

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 とメソッド挨拶() の両方がパブリックであるため、クラスの外部から直接アクセスできます。

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

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

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 クラス内でアクセスできます。

エラーのある例:

class Person {
    protected $age = 30;

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

$person = new Person();
echo $person->getAge();  // Error: Cannot access protected method Person::getAge()
ログイン後にコピー

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

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

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

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

class BankAccount {
    private $balance = 1000;

    private function getBalance() {
        return $this->balance;
    }

    public function showBalance() {
        return $this->getBalance();  // Correct: Accesses private method within the same class
    }
}

$account = new BankAccount();
echo $account->showBalance();  // Output: 1000
ログイン後にコピー
この例では、getBalance() メソッドはプライベートであるため、BankAccount クラス内でのみアクセスできます。 showBalance() メソッドはパブリックであり、プライベート getBalance() に間接的にアクセスするために使用できます。

エラーのある例:

class BankAccount {
    private $balance = 1000;

    private function getBalance() {
        return $this->balance;
    }
}

$account = new BankAccount();
echo $account->getBalance();  // Error: Cannot access private method BankAccount::getBalance()
ログイン後にコピー

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

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

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

class BankAccount {
    private $balance = 1000;

    private function getBalance() {
        return $this->balance;
    }
}

class SavingsAccount extends BankAccount {
    public function showBalance() {
        return $this->getBalance();  // Error: Cannot access private method BankAccount::getBalance()
    }
}

$savings = new SavingsAccount();
echo $savings->showBalance();
ログイン後にコピー

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

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

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

修飾子 クラス内 派生クラス 授業外
公開
Modifier Inside Class Derived Class Outside Class
Public Yes Yes Yes
Protected Yes Yes No
Private Yes No No
はい はい はい 保護されています

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

private を使用してクラス内部を完全にカプセル化し、外部クラスや派生クラスからのアクセスを防ぎます。

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

以上がPHP OOP のアクセス修飾子について: パブリック、プロテクト、プライベートの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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