[PHP] 클래스 정의 (class concept)
▶ OOP(객체지향 프로그래밍)의 개념과 이해가 부족하신분들은 아래 JAVA 클래스편을 참고바랍니다.
JAVA는 대표적인 OOP로써, PHP도 이런 추세에 맞춰 개발에 필요한 기능을 제공하고 있습니다.
그렇기에 OOP의 큰 개념은 같다고 생각하시면 됩니다.
● 클래스 정의 (class concept)
: 클래스는 class 키워드로 선언합니다. 기본적으로 프로퍼티와 메소드를 정의합니다.
프로퍼티는 변수와 상수로 정의하며, 메소드는 함수로 정의합니다.
클래스명은 대,소문자를 구별하지만, 대문자부터 시작하는것이 관례입니다.
public 키워드는 접근 권한을 지정하는 접근 지정자입니다.
만약 접근지정자를 제외하면 PHP는 public으로 인식됩니다.
<예제 1>
<?php
class Staff
{
##프로퍼티
public $name;
public $age;
##메소드
public function hello(){
echo "안녕하세요.";
}
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>클래스 Test</title>
</head>
<body>
<pre>
<?php
## Staff 클래스의 인스턴스를 만듬
$sam = new Staff();
$hana = new Staff();
## 프로퍼티 설정
$sam->name = "샘";
$sam->age = 27;
$hana->name = "하나";
$sam->age = 26;
## 인스턴스 확인
print_r($sam);
print_r($hana);
## 메소드 실행
$sam->hello();
$hana->hello();
?>
</pre>
</body>
</html>
위 소스를 보면, Staff클래스의 정의를 name 프로퍼티와 age프로퍼티, hello() 메소드로 정의했습니다.
해당 클래스에 인스턴스(객체)를 생성하고 프로퍼티에 값(Value)를 대입해줍니다.
print_r() 내장함수를 통해 해당 객체안에 있는 값들을 모두 브라우저에 출력해줍니다.
hello()메소드를 마지막으로 실행하면 "안녕하세요"가 출력됩니다.
( 반드시 인스턴스를 먼저 생성해야만, 프로퍼티 대입과 메소드 호출이 가능합니다! )
<예제 2>
<?php
class Staff{
#클래스 프로퍼티
public static $piggyBank = 0;
#클래스 메서드
public static function deposit($won){
self::$piggyBank += $won;
}
#인스턴스 프로퍼티
public $name;
public $age;
#생성자
function __construct($name, $age)
{
#프로퍼티에 초깃값을 설정
$this->name = $name;
$this->age = $age;
}
#인스턴스 메서드
public function hello(){
if(is_null($this->name)){
echo "안녕하세요!","\n";
}else{
echo "안녕하세요, {$this->name}입니다!","\n";
}
}
#지각해서 벌금
public function latePenalty(){
#정적메서드 실행
self::deposit(1000);
}
}
?>
위와 같이 Staff 클래스를 새로 만들어줍니다.
정적 프로퍼티와 정적 메소드를 직접 실습하기위해 static 키워드를 사용했습니다.
static을 사용한 프로퍼티와 메소드는 인스턴스를 생성하지않아도 가능합니다.
아래 View인 HTML 코드를 보며 설명해드리겠습니다.
<?php
require_once ("class_Staff2.php");
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Staff 클래스 멤버를 사용한다</title>
</head>
<body>
<pre>
<?php
#클래스 맴버를 실행한다.
Staff::deposit(100);
Staff::deposit(150);
#클래스 프로퍼티를 확인한다.
echo Staff::$piggyBank, "원이 되었습니다. \n";
#객체 생성
$hana = new Staff("하나", 21);
#객체 메서드 호출
$hana->latePenalty();
#클래스 프로퍼티를 확인
echo Staff::$piggyBank, "원이 되었습니다. \n";
?>
</pre>
</body>
</html>
우선, require_once키워드를 사용하면 외부 파일의 코드를 읽는 메소드입니다.
파라미터로 해당 파일을 넣어주면 됩니다. 그러면 해당 파일을 불러와 HTML에서 사용하게됩니다.
static 키워드를 사용한 정적 프로퍼티와 정적 메소드를 클래스안에서 사용하려면 self:: 키워드를 사용해줍니다.
객체를 생성하지않고 self:: 키워드를 사용해서 메소드 호출과 프로퍼티에 값을 넣어줄수있습니다.
static 키워드가 없는 프로퍼티와 메소드는 new 키워드를 사용해서 인스턴스(객체)를 만들어 사용해줍니다.
( require_once를 모르는 분들은 아래 URL을 참고해주세요. ^^ )