본문 바로가기
PHP/Python/Ruby

PHP 부모키워드 - Class

본문

부모클래스의 메쏘드 호출
 
보통 부모클래스에서 선언된 메쏘드를 자식클래스에서 재정의하는 이유는 크게 두가지가 있습니다.
 


1. 부모클래스 메쏘드를 완전히 새롭게 정의하기 위하여
2. 부모클래스 메쏘드의 기능에 새로운 기능을 추가하기 위하여

첫번째 기능은 부모클래스의 메쏘드를 무시하고 메쏘드에 새로운 정의를 함으로써 부모클래스의 메쏘드 정의를 숨기는 것입니다. 그러나 때로는 부모클래스의 메쏘드를 모두 지우는 것보다는 추가적인 기능이 필요한 경우가 있습니다. 이같은 경우에는 부모클래스의 메쏘드와 자식클래스에서 재정의된 메쏘드를 모두 수행하게 될 것입니다. 즉, 재정의된 메쏘드 구문 내에서 부모클래스의 메쏘드를 호출할 수 있어야 하며 필요한 기능만 추가적으로 작성하면 될 것입니다. 이럴 때 부모클래스의 메쏘드를 호출하기 위해서 사용하는 키워드가 parent입니다. 자바에서의 키워드 super와 같은 역할을 하며 이것은 그 메쏘드 호출을 상위클래스로 전달합니다.
 
부모키워드 parent는 $this 키워드와 비슷하게 이 클래스의 부모클래스를 나타내는 위치 지정자입니다. 현재 클래스의 부모클래스를 참조해야 되는 경우에는 부모키워드 parent를 사용할 수 있습니다.
 


class A {
  function example() {
    echo "클래스 A에 정의된 메쏘드 example. \n";
  }
}

class B extends A {
  function example() {
    echo "클래스 B에서 재정의된 메쏘드 example. \n";
    parent::example();
  }
}

$b = new B;

$b->example();

이 예의 출력결과를 보면 아래와 같이 나타날 것입니다.
 


클래스 B에서 재정의된 메쏘드 example.
클래스 A에 정의된 메쏘드 example.

앞장 범위연산자에서 설명한 대로 키워드 parent 대신에 extends 다음에 기술된 부모클래스명을 직접 사용해도 됩니다.
 


parent::example();  ------>  A::example();

키워드 parent를 써야 될 이유
 
위의 예에서 부모클래스를 A가 아닌 A1으로부터 상속받도록 수정하여야 한다면 아래와 같이 extends 다음에 있는 부모클래스명을 변경하는 것으로 모든 작업은 끝나게 됩니다. 만약 parent::example()가 아닌 A::example()라고 작성하였었다면 이 부분도 A1::example()라고 수정하여야 할 것입니다. 결국 수정할 때 손이 더 많이 가야 하는 것이지요. 그러니 부모클래스에 있는 메쏘드에 접근하는 경우라면 키워드 parent를 이용하는 것이 소스 코드를 관리하는데 훨씬 유리할 것입니다.
 


class B extends A1 {
  function example() {
    echo "클래스 B에서 재정의된 메쏘드 example. \n";
    parent::example();
  }
}

$b = new B;

$b->example();
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기

페이지 정보

최고관리자 작성일13-02-07 11:32 조회849회 댓글0건

첨부파일

댓글목록

등록된 댓글이 없습니다.

PHP/Python/Ruby 목록

게시물 검색

사이트 정보

  • 회사명 주인있소 / 대표 소담
  • 주소 강원도 속초시
  • 사업자 등록번호 123-45-67890
  • 전화 010-2026-0626 / 팩스 없음
  • 통신판매업신고번호 제 OO구 - 123호
  • 개인정보관리책임자 정보책임자명

고객센터

상단으로