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 とメソッド welcome() の両方がパブリックなので、クラスの外部から直接アクセスできます。
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; } } 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 のインスタンスから直接アクセスしようとすると、エラーが発生します。これは、保護されたメソッドにはクラスの外部からアクセスできないためです。
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().
に間接的にアクセスするために使用できます。
エラーのある例: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() に直接アクセスしようとするとエラーが発生します。サブクラスにエラーがある例:
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 のようなサブクラスにもアクセスできません。これは、プライベート メソッドがその定義クラスの外ではアクセスできないことを示しています。
クラス内 | 派生クラス | 授業外 | |
---|---|---|---|
公共 | はいはい | はい | |
保護されています | はいはい | いいえ | |
プライベート | はいいいえ | いいえ |
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3