본문 바로가기
프로그래밍 놀이터/Web

[PHP] Tutorial, 객체 지향

by 돼지왕 왕돼지 2013. 11. 15.
반응형


 PHP, Tutorial, 객체 지향  

[PHP] Tutorial, 객체 지향

=====

PHP 에서 클래스, 속성, 연산 만들기


class classname{ 

   var $attribute1;


   function operation1( $param1 ){ }

}



=====

생성자


__construct() 라는 이름을 가진다.



=====

소멸자


__destruct() 라는 이름을 가진다.



=====

생성


new 를 이용하여 생성한다.



=====

클래스 속성 사용하기


instance->attributeName 으로 접근한다.



=====

GET, SET 함수


__get, __set 함수를 가진다.

해당 attribute 에 접근하면 자동으로 get, set 함수가 불리게 된다.



=====

private 와 public 으로 접근 제어하기


기본은 public. private 으로 선언된 녀석은 클래스 내부에서만 접근.

protected 는 클래스 내부와 하위 클래스에서만 사용된다.



=====

상속 구현하기


extends 를 이용한다.



=====

오버라이딩


오버라이딩은 제공한다.



=====

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


다중상속은 지원하지 않는다. 단일 상속만을 지원한다.



=====

인터페이스 구현


interface Displayable{

   function display();

}


implements 로 구현한다.



=====

상수 정의


const 를 이용해 상수를 정의할 수 있고,

해당 상수는 생성 없이 사용할 수 있다.

접근은 :: 를 통해서 한다.


예를 들어 Math::Pi







=====

static method


static 을 키워드로 하여 함수를 정의하면, 

마찬가지로 Math::squared( 4 ) 와 같이 접근 가능하다.



=====

클래스 타입 검사와 타입 hinting


instanceof 를 사용하여 클래스 검사를 할 수 있고,

함수정의시 check_hint( SomeClass $someclass ) 와 같은 parameter 정의로

클래스 검사( 이를 hinting 이라 한다. )를 할 수 있다.



=====

객체 복사


$a = clone $b;


위와 같은 코드를 통해 b 의 복사본을 만들 수 있다.

clone 의 기본 행동을 바꾸고 싶으면 원 클래스에 __clone() 을 오버라이딩 하면 된다.

단 이 녀석은 생성자나 소멸자처럼 직접 호출할 수는 없다.



=====

추상 클래스 사용하기


abstract 키워드를 사용하여 만들 수 있다.

추상 함수를 가지고 있는 클래스는 추상 클래스여야 한다.



=====

__call() 로 메소드 오버로딩하기


public function __call( $method, $p ){

    if ( $method == 'display' )

        if ( is_object( $p[0] ) )

            $this->displayObject( $p[0] );

        else if ( is_array( $p[0] ) )

            $this->displayArray( $p[0] );

}


display 함수를 호출하면 자동으로 이 녀석이 호출된다.

__call 함수는 declare 안 된 함수를 호출했을 때만 불린다. 예를 들어 display 라는 함수가 정의되어 있었다면, __call 대신 display 함수가 대신 불린다.



=====

__autoload() 사용하기


클래스 메소드( static method )가 아닌 독립 함수( instantce method )이며,

선언되지 않은(require 혹은 include 안 된) 클래스를 생성하려 할 때 자동적으로 호출된다

주로 필요한 클래스의 인스턴스를 만들려고 할 때 클래스가 선언된 파일을 불러들이는 용도로 주로 사용


function __autoload( $name ){

    include_once $name.'.php';

}


( 만약 Foo.php 에 있는 무언가를 사용하려면 [ include_once( "./Foo.php" ); ] 로 include 를 해주고 사용해야 하지만, __autoload 가 위와 같이 정의되어 있다면 include_once 를 따로 호출하지 않아도 된다. )







=====

Iterator 와 반복 구현하기


IteratorAggregate interface 를 implement 하는 객체를 만든 다음,

iterator interface 를 반환하는 getIterator 함수를 만들어야 한다.

getIterator 에서 반환하는 녀석은 Iterator 를 구현한 class 여야 한다.


Iterator 를 구현하는 class 는 다음을 구현해야 한다.


* 생성자는 필요하지 않지만 반복할 아이템 수를 정하고 현재 데이터 아이템에 대한 연결 설정에 좋다.

* rewind() 는 포인터의 위치를 처음으로 되돌린다.

* valid() 는 현재 위치에 데이터가 더 남아있는지 알려줘야 한다.

* key() 함수는 데이터 포인터의 값을 리턴해야 한다.

* value() 함수는 데이터 포인터가 가리키고 있는 value 를 리턴해야 한다.

* next() 는 데이터 포인터를 다음으로 이동시킨다.



=====

클래스를 문자열로 반환하기.


__toString() 함수를 구현하면 echo 에서 자동으로 불린다.



=====

reflection API 사용하기


$class = new ReflectionClass( 'className' );

echo $class;


위와 같이 호출하면 className class 에 대한 모든 정보를 알 수 있다.



반응형

댓글