범위연산자란?
PHP4에서만 지원되며 클래스와 메소드 또는 클래스와 멤버변수를 연결시켜 주는 일로 범위연산자(scope resolver) 뒤에 나오는 메소드와 멤버변수의 스코프(사용범위)를 지정하는 일을 하는 것입니다.
클래스명::메소드명
클래스명::멤버변수명
클래스명::멤버변수명
범위연산자 사용목적
1. 인스턴스되지 않은 클래스의 메소드에 접근할 때
2. 부모클래스의 메소드와 멤버변수에 접근할 때
2. 부모클래스의 메소드와 멤버변수에 접근할 때
인스턴스되지 않은 클래스에 있는 메소드에 접근할 때
[code php;gutter:false]
class A {
function example() {
echo "클래스 A에 정의된 메소드 example. \n";
}
}
A::example(); [/code]
function example() {
echo "클래스 A에 정의된 메소드 example. \n";
}
}
A::example(); [/code]
아직 클래스 A에 대한 객체가 생성되기 전이지만 범위연산자를 이용하면 일반 함수처럼 실행시킬 수 있습니다. 그러나 클래스 A에 대한 객체가 전혀 생성되어 있지 않으므로 클래스 외부에서 이 함수에 접근할 때는 이 함수 내에 $this 객체를 사용해서는 안됩니다. 물론 일반 함수와 마찬가지로 지역 변수 및 전역 변수를 사용할 수는 있습니다.
[code php;gutter:false]
class A {
var $var = "초기값";
function example() {
echo "클래스 A에 속한 메소드 example. \n";
echo $this->var . "\n";
}
}
A::example(); [/code]
var $var = "초기값";
function example() {
echo "클래스 A에 속한 메소드 example. \n";
echo $this->var . "\n";
}
}
A::example(); [/code]
위의 예제를 보면 아직 클래스 A에 대한 객체가 생성되지 않았으므로 멤버변수 $var에 대한 기억장소가 할당되지도 않았고 더구나 초기값을 설정할 수도 없습니다. 그러니 아무리 범위연산자를 이용하여 메소드 example()에 접근한다해도 멤버변수 $var의 초기값을 나타낼 수는 없을 것입니다. 실험해 본 바로는 이 경우 $this->var의 값이 NULL로 처리되는 것 같습니다.
부모클래스의 메소드에 접근할 때
[code php;gutter:false]
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(); [/code]
function example() {
echo "클래스 A에 정의된 메소드 example. \n";
}
}
class B extends A {
function example() {
echo "클래스 B에서 재정의된 메소드 example. \n";
A::example();
}
}
$b = new B;
$b->example(); [/code]
이 예의 출력결과를 보면 아래와 같이 나타날 것입니다.
클래스 B에서 재정의된 메소드 example.
클래스 A에 정의된 메소드 example.
클래스 A에 정의된 메소드 example.
범위연산자는 클래스가 상속되었을 때 재정의되기 전의 부모클래스에 있는 메소드에 접근할 때 유용하게 사용될 수 있습니다.
부모클래스의 멤버변수에 접근할 때
php.net의 문서 설명과는 달리 아직 공개되지 않는 어떤 방법이 있는 지는 모르겠으나 부모클래스의 멤버변수로 접근하는 방법에 대하여는 문서화되지 않은 것 같습니다.
'phpclass > 클래스활용' 카테고리의 다른 글
{클래스 사용법}7.매직함수 (0) | 2000.07.13 |
---|---|
{클래스 사용법}6.parent (0) | 2000.07.13 |
{클래스 사용법}4.생성자 (0) | 2000.07.13 |
{클래스 사용법}3.클래스 상속 (0) | 2000.07.13 |
{클래스 사용법}2.객체 생성 (0) | 2000.07.13 |