오늘은 PHP 객체 지향 프로그래밍을 학습한다.
class를 선언하고 객체를 생성 및 접근해 보는 예제를 통해 PHP의 객체 지향 프로그래밍에 대해 학습할 예정이다.
1. 클래스 정의
- C++언어와 동일하게 클래스 정의에는 클래스 이름(대소문자 구분)과 속성, 메소드가 포함된다.
- 클래스 정의 예제
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php $object = new User; print_r($object); class User { public $name, $password; function save_user() { echo "Save User code goes here"; } } ?> | cs |
- 실행 결과
※ print_r 함수는 변수의 정보를 출력하는 명령어이다.
2. 객체 생성
- 특정 클래스로 객체를 생성하려면 object = new Class 의 형식으로 new 키워드를 사용한다.
- $temp = new User( 'name', 'password' ) 의 생성자로 인자를 넘기는 것도 C언어와 동일하게 지원한다.
3. 객체 접근법
- 객체의 접근법은 C++언어와 비슷하다.
- 객체 접근 예제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?php $object = new User; print_r($object); echo "<br>"; $object->name = 'Joe'; $object->password = "ypass"; print_r($object); echo"<br>"; $object->save_user(); class User { public $name, $password; function save_user() { echo "Save User code goes here"; } } ?> | cs |
- 실행 결과
4. 객체 복제
- 한 번 객체를 생성하면 매개변수로 넘길 때는 참조로 넘어간다.
- 객체 복제의 잘못된 예제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php $object1 = new User(); $object1->name = "Alice"; $object2 = $object1; $object2->name = "Amy"; echo "object1 name = ". $object1->name . "<br>"; echo "object2 name = ". $object2->name . "<br>"; class User { public $name; } ?> | cs |
- 실행 결과
※ 참조이기 때문에 object2의 값을 변경하면 object1의 결과도 함께 변경된다.
- 이 경우 clone 연산자를 사용하면 새로운 인스턴스를 생성하고 원본 인스턴스의 속성 값을 복사한다.
- clone 연산자 사용 예제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php $object1 = new User(); $object1->name = "Alice"; $object2 = clone $object1; $object2->name = "Amy"; echo "object1 name = ". $object1->name . "<br>"; echo "object2 name = ". $object2->name . "<br>"; class User { public $name; } ?> | cs |
- 실행 결과
- PHP 5부터는 __construct(), __destruct()와 같은 메소드를 지원한다.
- 생성자는 인자를 받아 처리 가능하도록 지정할 수도 있다.
- 생성자 소멸자 예제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php $object1 = new User("Guest"); echo "[construct] object1 name = ". $object1->name . "<br>"; $object1->name = "Alice"; echo "[After assign] object1 name = ". $object1->name . "<br>"; class User { public $name; public function __construct($name) { $this->name = $name; } public function __destruct() { echo "Call destructor!<br>"; } } ?> | cs |
- 실행 결과
6. 클래스 선언 종합 예제
- 기본적인 클래스 선언 방법 및 접근제한자는 C++언어와 동일하다.
- 종합적으로 class를 선언하고 사용하는 예제를 확인해 보자.
- 클래스 선언 종합 예제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | <?php $object = new User(); $object->name = "Alice"; $object->set_password("123qwe"); $object->print_user(); //static 함수 호출 예제 User::test_print(); class User { public $name; private $password; public function __construct() { $this->name = "Guest"; } public function __destruct() { echo "Call destructor!<br>"; } function set_password($pwd) { $this->password = $pwd; } function get_password() { return $this->password; } function print_user() { echo "Password of $this->name : $this->password<br>"; } static function test_print() { echo "This is static function!<br>"; } } ?> | cs |
- 실행 결과
7. 상수 선언
- class 내 상수 선언이 가능하며, 상수는 self 키워드롸 더블콜론(::)을 사용해 직접 참조된다.
- 상수 선언 예제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php Translate::lookup(); class Translate { const ENGLISH = 0; const SPANISH = 1; const FRENCH = 2; static function lookup() { echo self::SPANISH; } } ?> | cs |
8. 상속
- 상속과 관련된 기술도 C++언어와 동일하게 PHP에서 사용 가능하다.
- 상속 예제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | <?php $object = new Subscriber("Fred", "pword", "012 345 6789","fred@bloggs.com"); $object->display(); class User { public $name, $password; function save_user() { echo "Save User code goes here<br>"; } } class Subscriber extends User { public $phone, $email; public function __construct($name, $password, $phone, $email) { $this->name = $name; $this->password = $password; $this->phone = $phone; $this->email = $email; } function display() { echo "Name : $this->name<br>"; echo "Pwd : $this->password<br>"; echo "Phone : $this->phone<br>"; echo "e-mail : $this->email<br>"; } } ?> | cs |
- 실행 결과
PHP 클래스 선언과 객체 생성에 대한 예제를 학습해 봤다.
C++과 크게 다르지 않아서 객체 지향 언어에 익숙한 사용자라면 쉽게 배울 수 있을 것 같다.
'제대로알자, SW > 웹 프로그래밍' 카테고리의 다른 글
Django를 활용한 Python 웹 프로그래밍 (1) - 개념 정리 (2) | 2017.08.01 |
---|---|
웹프로그래밍 입문(6) PHP 배열 활용 기법 (0) | 2017.07.05 |
웹 프로그래밍 입문(4) PHP 함수 (0) | 2017.07.03 |
웹 프로그래밍 입문(3) - PHP 기본 문법 (0) | 2017.06.30 |
웹 프로그래밍 입문(2) - PHP 개발 환경 설정(XAMPP / NetBeans) (0) | 2017.06.29 |