제9 절 귀속[9]
salutationn");$this->identify(); } protected function identify() { print("I am Father.
n"); } }; class Son extends Father { protected $salutation = "Hey!"; file://부모 클래스 의 proctected$salutation 덮어 쓰기 proctected function identify()file://부모 클래스 의 proctected identify()덮어 쓰기{print("I am Son.
n");};$obj = new Son(); $obj->getSalutation(); 파일://출력 Hey!I am Son. ?>
//주:하위 클래스 에 getSalutation()을 덮어 쓰 지 않 았 지만 실제 getSalutation()이 존재 합 니 다.이 클래스 의$salutation 과 identify()//Son 하위 클래스 의 인 스 턴 스 중의 getSalutation()방법 과 동적 으로 연결 되 어 있 기 때문에 Son 의 인 스 턴 스 를 호출 하 는 getSalutation()방법,//Son 클래스 의 구성원 salutation 및 identify()를 호출 합 니 다.부모 클래스 의 구성원 salutation 및 identify()가 아 닙 니 다.Private 구성원 은 클래스 내부 에 만 존재 합 니 다.Public 와 proctected 구성원 처럼 PHP 는 정적 바 인 딩 을 모 의 합 니 다.예 를 들 어 6.11.출력'Hello there!I am Father.",하위 클래스 가 salutation 의 값 을 복 사 했 음 에 도 불구 하고 스 크 립 트 는 this->salutation 을 현재 클래스 Father 와 연결 합 니 다.유사 한 원칙 은 private 방법 identify().Listing 6.11 Binding and private members 에 적 용 됩 니 다.
salutationn"); $this->identify(); } private function identify() { print("I am Father.
n"); } } class Son extends Father { private $salutation = "Hey!"; private function identify() { print("I am Son.
n"); } } $obj = new Son(); $obj->getSalutation(); 파일://출력 Hello there!I am Father. ?>동적 바 인 딩 의 장점 은 계승 클래스 가 부모 클래스 의 행동 을 바 꾸 는 동시에 부모 클래스 의 인터페이스 와 기능 을 유지 할 수 있다 는 것 입 니 다.예 를 들 어 6.12.동적 바 인 딩 을 사 용 했 기 때문에 deleteUser 에서 호출 된 isAuthorized version 은 대상 의 형식 으로 확인 할 수 있 습 니 다.일반적인 user 라면 PHP 호출 User::isAuthorized 는 FALSE 로 돌아 갑 니 다.Authorized User 의 인 스 턴 스 라면,PHP 호출 Authorized User::isAuthorized,deleteUser 의 순 조로 운 실행 을 허용 합 니 다.//haohhappy 주:한 마디 로 대상 유형 과 방법,속성 바 인 딩 입 니 다.부모 클래스 와 하위 클래스 에 존재 하 는 방법 을 호출 하거나 속성 에 접근 할 때 인 스 턴 스 가 어떤 대상 유형 에 속 하 는 지 판단 한 다음 에 해당 하 는 클래스 의 방법 과 속성 을 호출 합 니 다.Listing 6.12 동적 바 인 딩 의 장점
name);}public function deleteUser($username)file://사용자{if(!$this->isAuthorized()) { print("You are not authorized.
n"); return(FALSE); } //delete the user print("User deleted.
n"); } } class AuthorizedUser extends User file:/인증 사용자{protected function isAuthorized()file://덮어 쓰기 isAuthorized(){return(TRUE);}}$user = new User; $admin = new AuthorizedUser; //not authorized $user->deleteUser("Zeev"); //authorized $admin->deleteUser("Zeev"); ?> 왜 private 클래스 구성원 들 은 정적 바 인 딩 을 모 의 합 니까?이 질문 에 대답 하기 위해 서 는 왜 private 멤버 가 필요 한 지 기억 해 야 합 니 다.언제 protected 멤버 대신 사용 하 는 것 이 의미 가 있 습 니까?private 구성원 은 하위 클래스 의 계승 을 바 꾸 거나 부모 클래스 의 행 위 를 특수 화 시 키 고 싶 지 않 을 때 만 사용 합 니 다.이런 상황 은 생각 보다 적 습 니 다.일반적으로 좋 은 대상 의 계층 구 조 는 절대 다수의 기능 이불 류 의 특수 화,개선 또는 변 화 를 허용 해 야 합 니 다.이것 은 대상 을 대상 으로 프로 그래 밍 하 는 기초 중 하나 입 니 다.일정한 상황 에서 private 방법 이나 변수 가 필요 합 니 다.예 를 들 어 하위 클래스 가 부모 클래스 의 특정한 부분 을 바 꾸 는 것 을 허락 하고 싶 지 않다 고 확신 할 때.