본문 바로가기
PHP/Python/Ruby

PHP 범위연산자 - Class

본문

범위연산자란?
 
PHP4에서만 지원되며 클래스와 메쏘드 또는 클래스와 멤버변수를 연결시켜 주는 일로 범위연산자(scope resolver) 뒤에 나오는 메쏘드와 멤버변수의 스코프(사용범위)를 지정하는 일을 하는 것입니다.
 


클래스명::메쏘드명
클래스명::멤버변수명

범위연산자 사용목적
 


1. 인스턴스되지 않은 클래스의 메쏘드에 접근할 때
2. 부모클래스의 메쏘드와 멤버변수에 접근할 때

인스턴스되지 않은 클래스에 있는 메쏘드에 접근할 때
 


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

A::example();

아직 클래스 A에 대한 객체가 생성되기 전이지만 범위연산자를 이용하면 일반 함수처럼 실행시킬 수 있습니다. 그러나 클래스 A에 대한 객체가 전혀 생성되어 있지 않으므로 클래스 외부에서 이 함수에 접근할 때는 이 함수 내에 $this 객체를 사용해서는 안됩니다. 물론 일반 함수와 마찬가지로 지역 변수 및 전역 변수를 사용할 수는 있습니다.
 


class A {
  var $var = "초기값";

  function example() {
    echo "클래스 A에 속한 메쏘드 example. \n";
    echo $this->var . "\n";
  }
}

A::example();

위의 예제를 보면 아직 클래스 A에 대한 객체가 생성되지 않았으므로 멤버변수 $var에 대한 기억장소가 할당되지도 않았고 더구나 초기값을 설정할 수도 없습니다. 그러니 아무리 범위연산자를 이용하여 메쏘드 example()에 접근한다해도 멤버변수 $var의 초기값을 나타낼 수는 없을 것입니다. 실험해 본 바로는 이 경우 $this->var의 값이 NULL로 처리되는 것 같습니다.
 
부모클래스의 메쏘드에 접근할 때
 


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

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

$b = new B;

$b->example();

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


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

범위연산자는 클래스가 상속되었을 때 재정의되기 전의 부모클래스에 있는 메쏘드에 접근할 때 유용하게 사용될 수 있습니다.
 
부모클래스의 멤버변수에 접근할 때
 
php.net의 문서 설명과는 달리 아직 공개되지 않는 어떤 방법이 있는 지는 모르겠으나 부모클래스의 멤버변수로 접근하는 방법에 대하여는 문서화되지 않은 것 같습니다.
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기

페이지 정보

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

첨부파일

댓글목록

등록된 댓글이 없습니다.

PHP/Python/Ruby 목록

게시물 검색

사이트 정보

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

고객센터

상단으로