PHP OOP(객체 지향 프로그래밍)에서 액세스 한정자는 클래스 속성과 메서드의 가시성을 제어합니다. PHP의 기본 액세스 한정자는 공개, 보호 및 비공개입니다.
이 글에서는 이러한 액세스 한정자의 목적과 사용법을 안내하고 이를 PHP OOP에 효과적으로 적용하는 방법을 설명합니다.
class User { public $name = "John"; public function greet() { return "Hello, " . $this->name; } } $user = new User(); echo $user->greet(); // Output: Hello, John
이 예에서는 $name 속성과 Greeting() 메서드가 모두 공개되어 클래스 외부에서 직접 액세스할 수 있습니다.
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()
이 경우 Person 인스턴스에서 보호된 메서드인 getAge()에 직접 액세스하려고 하면 클래스 외부에서는 보호된 메서드에 액세스할 수 없기 때문에 오류가 발생합니다.
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 OOP의 액세스 수정자 이해: 공개, 보호 및 비공개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!