PHP로도 객체지향 프로그래밍을 할 수 있습니다. PHP 4 버전 때부터 쓸 수 있었고, PHP 5가 되면서 기능이 추가되고 성능이 향상되었습니다.
1. 클래스의 기본구조 및 이름 규칙
<?php
class Car_Engine {
// 프로퍼티(멤버 변수)
private $_displacement;
public $engineName;
// 메소드
public function getDisplacement() {
return $this->_displacement;
}
public function setDisplacement($displacement) {
$this->_displacement = $displacement;
}
}
?>
- class 키워드 다음에 클래스 이름이 나옵니다.
- 클래스 전체는 중괄호 {}로 둘러싸여 집니다.
- 안쪽에 프로퍼티와 메소드의 정의가 나옵니다.
- 프로퍼티의 정의는 보통 앞쪽에 적지만 위치는 관계가 없습니다. 뒤쪽에 나와도 되고, 중간에 나와도 됩니다.
- 프로퍼티와 메소드의 정의 앞에는 private, public 이라는 접근제어자가 붙어 있습니다. 이것은 해당 멤버를 클래스 외부에서 접근할 수 있는가를 나타냅니다.
클래스의 기본적인 구조를 보았습니다. 이제 클래스 이름, 프로퍼티와 메소드의 이름을 짓는 방법에 대해서 알아보겠습니다. 변수명 규칙을 따르기만 하면 문법적으로는 문제가 없지만 보통 Naming Convention(관습적인 이름짓는 규칙)을 따르게 됩니다.
- 클래스 이름은 대문자로 시작합니다. 여러단어로 구성될 경우 각단어의 사이는 언더스코더(_) 를 사용하여 분리하고, 각 단어의 첫자를 대문자를 사용합니다.(예, Car_Engine)
- 프로퍼티와 메소드는 소문자로 시작합니다. 여러단어로 구성될 경우 붙여서 적고, 첫단어를 제외한 단어의 첫자를 대문자로 적습니다. (예, $engineName)
- 프로퍼티와 메소드가 private인 경우 첫자를 언더스코어(_) 를 사용합니다.
이대로 쓰지 않아도 관습적인 규칙이라 내가 다르게 쓴다고 뭐라고 할 사람은 없을 것입니다.
2. 접근 제어자(Access Modifier)와 클래스 사용하기
public : 외부에서 접근이 가능합니다.
protected : 내부와 상속 받은 클래스에서 접근이 가능합니다.
private : 내부에서만 사용할 접근할 수 있습니다.
위에서 정의한 클래스를 사용하는 방법을 보겠습니다.
<?php
$engine = new Car_Engine();
$engine->setDisplacement(3.3);
$engine->engineName = "좋은 엔진";
echo $engine->getDisplacement();
echo $engine->engineName;
?>
클래스의 생성을 new 연산자를 사용합니다.
$engine = new Car_Engine();
이제 객체가 생성되었으므로 사용을 할 수 있습니다. public 인 멤버에 접근 할 수 있습니다. 멤버를 사용하기 위해서는 -> 연산자를 사용합니다. 메소드와 멤버 변수에 접근하는 예입니다.
$engine->setDisplacement(3.3);
$engine->engineName = "좋은 엔진";
private 멤버에 접근하려고 하면 에러가 발생합니다.
$engine->_displacement = 3.3; // 사용할 수 없습니다.
3. 생성자 와 $this
앞에서 객체를 생성할때 클래스명 뒤에 괄호를 사용했습니다.
$engine = new Car_Engine();
이 부분이 생성자를 호출하는 부분입니다. 생성자는 객체가 생성될때 실행되는 특수한 메소드 입니다. 생성자를 호출하지 않을 경우 다음과 같이 생성할 수도 있습니다.
$engine = new Car_Engine;
생성자는 주로 객체를 생성시 초기값을 주기 위해서 사용합니다. 생성자는 하나만 나와야 합니다. 보통 객체지향언어는 오버로딩(overloading) 이라고해서 인자만 다른 여러개의 같은 이름의 생성자를 생성할 수 있습니다. PHP는 생성자 오버로딩이 되지 않습니다. 하나의 생성자만을 만들어야 합니다.
public function __construct($en) {
$this->engineName = $en;
}
이렇게 생성자를 추가해 두면
$engine = new Car_Engine("좋은 엔진");
이런 식으로 초기화 할 수 있습니다.
클래스 내부에서 사용된 $this 는 객체 자신을 나타내는 미리 정의된 멤버 입니다.
내부에서 자신의 멤버변수나 메소드를 사용할 때 반드시 $this->engineName 과 같이 사용해야 합니다. $this-> 를 빼먹고 $engineName 처럼 사용하면 멤버변수가 아니라, 그 위치에서의 지역변수로 처리 되어 버리므로 원하는 결과를 얻을 수 없습니다.
'프로그래밍 > PHP' 카테고리의 다른 글
PHP 클래스 - 오버라이드(Override) (0) | 2018.04.10 |
---|---|
PHP 클래스 상속(Inheritance) (0) | 2018.04.09 |
자동등록방지 구글 reCAPTCHA(리캡챠) 설치하기 - PHP (0) | 2018.04.04 |
PHP 날짜 함수 사용하기 - date, strtotime, mktime (0) | 2018.04.03 |
PHP 7.1 실행시 VCRUNTIME140.dll 오류 문제 해결하기 (2) | 2018.04.02 |