메뉴 건너뛰기

Dev tips

PHP [객체지향] this / __get() / __set() / clone / autoload / ::

taknim 2009.06.12 02:21 조회 수 : 9250 추천:2407

http://blog.naver.com/kjy07080/70018566139

객체지향의 개념은 여타 프로그래밍 언어와 같다. 하지만 PHP에서는 조금 다른 부분이 있는데

다중상속을 지원하지 않는다.

 

클래스의 구조

class classname {  //클래스의 시작

}

 

생성자

초기값을 주거나 객체에 필요한 다른객체를 생성하는등의 초기화 작업을 수행(이전버전과의 호환성을 위해 _construct()가 정의되어 있지 않으면 클래스 이름과 동일한 이름을 가진 함수를 생성자로 인식한다.)

function __construct($param) { 

}

 

소멸자 

클래스가 없어지기전에 해야할 일들을 수행(파라미터를 가지지 못한다.)

function __destruct() { 

}

 

인스턴스 생성

new키워드를 통해서 인스턴스를 생성하고, 이를 통해서 클래스를 사용할 수 있게 된다.

$a = new classname('first'); 

 

상속

class B extends A{   //A에서 상속받는다.

}

 

오버라이딩

상위 클래스에 함수나 변수 $a가 있다면 하위클래스에서 상속받았을때 이름을 같게 하여 $a의 값 변경

 

 

final을 사용하여 상속과 오버라이딩 막기

final을 함수 앞에 놓으면 하위클래스에서 더이상 오버라이딩 할 수 없다.

오버라이딩을 하려하면 'Fatal error: Cannot override final method A::operation()' 에러가 발생한다.

final function operation() { ... }

 

$this

클래스안에서의 특별한 변수인 $this는 지금 현재의 클래스를 지칭한다.

$this->$attribute = $param; 

 

__get()

단하나의 파라미터를 받아 변수의 값을 반환한다.

__set()

두개의 파라미터를 받아 하나는 멤버변수 이름이고, 두번째는 변경할 수의 값

$a->attribute = 5; //__set()이 내부적으로 호출되어 $name이 attribute이고 $value는 5가 되어 변경된다.

 

객체복사 clone

$c = clone $b;   //$b와 동일한 속성값을 가지는 복사본을 만든다.

clone의 기본적인 행동을 바꾸고 싶다면 __clone()메소드를 직접 정의하여 복사 할 수 있다.

__clone()메소드를 정의하면 복사본을 만드는 기본적인 행동 뒤에 __clone()이 호출된다.

 

__autoload()

이 함수는 메소드가 아닌 독립된 함수이다. 즉, 클래스 선언 없이 외부에서 사용할 수 있다.

__autoload()를 구현하면 선언되지 않는 클래스를 생성하려 할 때 자동적으로 호출된다.

function __autoload($name) {

}

 

클래스 당 상수 / 정적 메소드 사용하기

'::' 연산자를 사용하면 클래스를 생성없이 사용할 수 있다. 그리고 정적메소드는 참조객체가 없으므로 this키워드 사용불가

class Math {

  const pi=3.14;

  static function squared($input) {

    return $input * $input;

  }

}

echo 'Math::pi = '.Math::pi.'"\n";  // 클래스당 상수 접근

echo Math::squared(8);  //정적메소드 구현