메뉴 건너뛰기

Dev tips

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

taknim 2009.06.12 02:21 조회 수 : 9280 추천: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);  //정적메소드 구현

 

 

 


번호 제목 글쓴이 날짜 조회 수
314 ext3grep – ext3 복구를 쉽게 taknim 2009.06.20 8378
313 구글을 이용한 rapidshare 에 등록된 파일 검색 taknim 2009.06.19 9415
312 폼관련 스크립트 짤때 맨날 인클루드 해서쓰는 함수들 taknim 2009.06.17 7461
» [객체지향] this / __get() / __set() / clone / autoload / :: taknim 2009.06.12 9280
310 [Oracle] ORA-00600, ORA-06544, ORA-06553 오류 발생시 taknim 2009.06.09 23852
309 [php.ini] auto_prepend_file, auto_append_file 설정 taknim 2009.06.04 11661
308 IE6 에서 SELECT z-index 문제 taknim 2009.06.04 10218
307 리눅스에서 삼바서버 연결하기, 끊기 (mount, umount) taknim 2009.05.29 12347
306 VNC사용시 number keypad숫자가 안 먹을때 taknim 2009.05.29 11958
305 문자열에서 문자 하나하나를 html 형식(&#)으로 변경하기 taknim 2009.05.14 8020
304 이미 설치된 아파치에 rewrite 모듈 추가 설치 taknim 2009.04.30 11887
303 MS-SQL 링크드 서버 만들기 taknim 2009.03.20 12177
302 특정 레코드 앞뒤로 합계 구하기(over,range,PRECEDING,following) taknim 2009.02.05 9911
301 StrConv 함수 - 로케일 변환 taknim 2009.01.30 10828
300 javascript 로 stylesheet 컨트롤할때 키워드 매칭표 taknim 2009.01.22 6786
299 iframe 크기 자동조절 (네이버) - 파이어폭스가능 taknim 2009.01.22 7585
298 POST방식으로 다른 charset Action에 Data 넘겨주는 방법 taknim 2009.01.22 10257
297 mysql 자동 최적화 / 복구 스크립트 taknim 2009.01.16 9803
296 [KISA] mod security 매뉴얼 및 동영상 taknim 2009.01.14 10675
295 유용한 함수 pack, unpack, ip2long, long2ip taknim 2009.01.13 33390