클래스를 사용하기 위해서는 함수 선언처럼 클래스를 미리 정의해야 합니다. 또한 PSR 코딩 스타일에 따르면 클래스는 기능별 개별 파일로 작성하는 것을 권장합니다. 또한 1개의 파일 안에 1개의 클래스 작성을 권장합니다.
클래스 이외에도 향후 설명할 인터페이스, 트레이트 등도 같은 방식의 코딩스타일 사용을 권장합니다.
클래스의 정의는 class 키워드를 통해 클래스를 선언할 수 있습니다. 클래스의 선언 방법은 class 키워드 다음에 클래스명을 작성을 합니다. 클래스명은 PSR-1 표준 코딩 스타일 방식을 따르면 클래스명은 낙타 표기법 (StudlyCaps) 스타일로 작성을 권장합니다.
예) StudyCaffe, JinyPhp
위의 예처럼 낙타 표기법(StudlyCaps) 방식은 첫 문자는 대문자로 표기하는 스타일입니다.
또한 클래스명은 PHP에서 예약된 키워드를 제외한 영문자로 시작되어야 합니다.
|문법|
class 클래스명
{
// 프로퍼티 선언
public $var = “default”';
// 메서드 함수 선언
public function 함수명()
{
메서드 함수 내용들...
}
}
클래스 객체는 여러 개의 프로퍼티와 메서드를 포함하고 있습니니다. 클래스 객체의 프로퍼티와 메서드는 클래스 본체 중괄호 { } 안에 작성합니다.
PSR 에서 권고하는 코딩 스타일 방식을 따르면 중괄호 의 시작 위지는 클래스 선언 다음 줄에 위치합니다. 또한 class 키워드와 같은 탭 크기의 들여쓰기 위치에 자리를 잡습니다. 객체의 메서드와 프로퍼티는 중괄호 본체 안에서 들여쓰기로 작성합니다.
프로퍼티는 클래스에서 변수를 부르는 또 다른 이름 중 하나입니다.
클래스 안에 선언된 변수를 프로퍼티라고 부르는데, 이렇게 이름을 달리 부르는 것은 기존에 사용하는 변수와 클래스 안에 들어 있는 변수를 구분하기 위해서입니다.
|문법|
class 클래스명
{
// 프로퍼티 선언
private $aaa;
public $bbb = "default";
// _ 밑줄을 이용하여 구분할 수 있습니다.
const DATE_APPROVED = '2017-05-17';
// 메서드 함수 선언
public function 함수명()
{
메서드 함수 내용들...
}
}
프로퍼티를 작성하는 위치는 클래스 안과 메서드 함수 밖에 선언합니다. 다른 관점으로 생각해보면 클래스 객체 안에서는 바라보면 지역변수가 될 수도 있고, 메서드 밖에서는 바라보면 글로벌변수가 될 수도 있습니다.
PHP언어에서는 특성상 변수 사용과 동시에 자동으로 변수가 할당되어 생성됩니다. 이러한 점은 PHP에서 매우 편리한 기능입니다. 하지만 객체에 포함되는 프로퍼티 변수는 먼저 사용하기 전에 미리 변수를 프로퍼티로 선언해야 합니다.
프로퍼티 변수만 선언할 수 있습니다. 또는 = 대입 연산자를 통해 초기값도 같이 설정할 수 있습니다.
통상적으로 객체 안에 포함되는 프로퍼티 변수는 변수명 앞에 접근 권한 속성을 갖는 키워드를 같이 지정하여 사용합니다. 만일 접근 권한 속성을 생략하는 경우에는 명시적으로 public으로 설정한 것으로 간주합니다.
프로퍼티 변수명은 일관성 있게 사용을 권장합니다. PSR 권장 코딩 스타일로 특별히 낙타 표기법 (StudlyCaps, camelCase, under_score) 사용을 구분하지는 않습니다.
객체 내에서 프로퍼티를 선언할 때는 PSR 권장 코딩 스타일 방식으로 중괄호 본체 안에서 들여쓰기 작성을 권고합니다.
메서드(Method)라는 이름은 객체 내에서 함수를 부르는 또 다른 이름 중 하나입니다.
클래스 안에서 작성된 함수를 메서드라고 부릅니다. 이렇게 이름을 달리 부르는 것은 기존에 사용하는 함수와 클래스 안에 있는 함수를 구분하기 위해서입니다.
클래스 안에서 메서드를 선언하는 것은 기존 함수를 선언하여 사용하는 것과 동일합니다. 단지 클래스 내부에 함수를 선언한다는 것이 차이점입니다.
|문법|
class ClassName
{
public function 메서드_함수명1(매개변수)
{
// method body
}
private function 메서드_함수명2(
매개변수1,
매개변수2,
매개변수3
) {
// method body
}
}
메서드 또한 함수이기 때문에 function 키워드를 이용하여 작성합니다.
메서드 이름은 PSR 권장 표준 코딩 스타일을 따라서 낙타 표기법(camelCase) 스타일로 작성을 권고합니다. 또한 메서드 이름의 첫 시작 문자는 소문자 사용 할 것을 권장합니다.
예) camelCase (), loveStudy()
객체 내에서 메서드를 선언할 때는 PSR 권장 코딩 스타일 방식으로 중괄호 본체 안에서 들여쓰기 하여 작성할 것을 권고합니다.
객체의 메서드도 일반 함수처럼 매개변수 인자를 가질 수 있습니다. 함수와 같이 매개변수를 전달하는 소괄호를 사용하여 다수의 변수 값을 메서드로 전달할 수 있습니다. 다수의 변수를 전달할 때는 콤마로 구분하거나 여러 줄로 작성할 때는 PSR 코딩 스타일 방식으로 한 줄에 한 개의 매개변수 작성하는 것을 권고합니다.
객체의 메서드는 일반 함수와 달리 function 키워드 안에 접근 권한 속성을 갖는 키워드를 같이 지정하여 사용합니다. 프로퍼티 설정에서 접근 권한 속성을 부여하는 것과 같습니다.
객체 클래스만의 상수를 선언할 수 있습니다. 객체 클래스 내에 상수를 선언하는 것은 프로그램 소스 전체에서 사용이 가능한 공용 상수가 아닙니다. 이 상수는 객체 클래스 안에서만 사용할 수 있는 상수 코드로 독립적인 효과가 있습니다.
PHP 언어는 두 가지의 방식으로 상수를 설정할 수 있습니다. 하지만 이 두 가지 중에서 객체 클래스 안에서 상수 설정 가능한 방법은 const 명령만 사용 가능합니다. 즉, define() 함수는 사용하지 않습니다.
클래스 상수
class language {
const ENGLISH = "en";
const KOREAN = "ko";
}
객체 클래스 본문 중괄호 { } 안에 const를 사용하여 상수를 선언하면 됩니다. 상수를 선언하는 문법과 방식은 기존 PHP 상수 설정과 같지만 클래스 본문 안에 작성한다는 것이 차이점입니다.
클래스 안에 상수를 쓸 때는 PSR-2 코딩 스타일 방식으로 들여쓰기를 하여 작성합니다. PSR-1 코딩 스타일에 따라서 상수는 대문자로 작성합니다. 상수명이 길어질 때는 밑줄(_)을 통해 구분하여 상수명을 작성할 수도 있습니다.
클래스 상수를 사용할 때는 객체변수 뒤에 이중콜론(::) 기호로 사용할 수 있습니다.
|문법|
$객체변수::상수명
클래스 내부적으로 사용을 할 때는 다음과 같은 형태로 사용 가능합니다.
|문법|
self::상수명
예제 파일 class-01.php
<?php
class language {
const ENGLISH = "en";
const KOREAN = "ko";
public function getEnglish()
{
return self::ENGLISH;
}
}
$obj = new language();
echo "클래스 상수 출력<br>";
echo "KOREAN = " . $obj::KOREAN . "<br>";
echo "메서드를 이용한 상수 출력<br>";
echo "ENGLISH = " . $obj->getEnglish() . "<br>";
?>
결과
클래스 상수 출력
KOREAN = ko
메서드를 이용한 상수 출력
ENGLISH = en
위의 예제는 클래스 내부에 독립 상수를 설정하고, 이를 접근 출력하는 예입니다. language 클래스는 두 개의 상수를 가지고 있습니다. 첫 번째 출력에서는 직접 객체에 접근하여 사용했습니다. 두 번째 출력에서는 매서드를 이용하여 내부 접근을 한 후에 상수값을 출력합니다.