본문 바로가기

제대로알자, SW/웹 프로그래밍

웹 프로그래밍 입문(5) PHP 클래스 및 객체



오늘은 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


- 실행 결과


5. 생성자와 소멸자

- 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++과 크게 다르지 않아서 객체 지향 언어에 익숙한 사용자라면 쉽게 배울 수 있을 것 같다.