본문 바로가기

WEBD/PHP

Class 사용법 정리 5.범위연산자

5.범위연산자 

 

 

범위연산자란?

 

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의문서설명과는달리아직공개되지않는어떤방법이있는지는모르겠으나부모클래스의멤버변수로접근하는방법에대하여는문서화되지않은것같습니다.

LIST