PHP オブジェクト指向プログラミング (OOP) では、アクセス修飾子 はクラスのプロパティとメソッドの可視性を制御します。 PHP の主なアクセス修飾子は、public、protected、および private です。
この記事では、これらのアクセス修飾子の目的と使用法を説明し、PHP OOP でそれらを効果的に適用する方法を説明します。
class User { public $name = "John"; public function greet() { return "Hello, " . $this->name; } } $user = new User(); echo $user->greet(); // Output: Hello, John
この例では、プロパティ $name とメソッド挨拶() の両方がパブリックであるため、クラスの外部から直接アクセスできます。
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 のインスタンスから直接アクセスしようとすると、エラーが発生します。これは、保護されたメソッドにはクラスの外部からアクセスできないためです。
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 などのサブクラスからもアクセスできず、プライベート メソッドがその定義クラスの外にはアクセスできないことを示しています。
Modifier | Inside Class | Derived Class | Outside Class |
---|---|---|---|
Public | Yes | Yes | Yes |
Protected | Yes | Yes | No |
Private | Yes | No | No |
結論 PHP のアクセス修飾子 (public、protected、private) は、OOP での可視性とカプセル化を管理するメカニズムを提供します。これらの修飾子を正しく理解して適用することで、より安全で保守しやすいコードを作成できます。
以上がPHP OOP のアクセス修飾子について: パブリック、プロテクト、プライベートの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。