객체지향의 개념은 여타 프로그래밍 언어와 같다. 하지만 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); //정적메소드 구현
댓글 0
- 전체
- Android+iPhone+etc.
- Apache+Tomcat
- ASP
- ASP.NET
- DataBase
- HTML / CSS
- JavaScript
- JSP
- Linux Server
- PHP
- Raspberry pi
- Windows Server
- WIPI
- Etc.