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와 같은 하위 클래스에서도 액세스할 수 없습니다. 이는 정의 클래스 외부에서 개인 메소드에 액세스할 수 없음을 보여줍니다.
수정자 | 클래스 내부 | 파생 클래스 | 외부수업 |
---|---|---|---|
공공의 | 예 | 예 | 예 |
보호됨 | 예 | 예 | 아니요 |
사적인 | 예 | 아니요 | 아니요 |
PHP의 액세스 수정자(공개, 보호, 비공개)는 OOP에서 가시성과 캡슐화를 관리하는 메커니즘을 제공합니다. 이러한 수정자를 올바르게 이해하고 적용하면 보다 안전하고 유지 관리가 쉬운 코드를 만들 수 있습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3