[PHP메모] 객체 지향

메모/PHP 2017. 1. 15. 19:43

728x90
반응형

객체 지향① 클래스와 메서드의 정의


클래스란 여러 함수 등을 하나로 정리하는 프로그램의 단위입니다. 그리고 클래스에 정의된 함수를 '메서드'라고 부릅니다.


30~38번째 행에서 클래스를, 31~37번째 행에서 메서드를 정의하고 있습니다. 이번에는 메서드를 하나만 정의하지만, 클래스에는 메서드를 몇 개다로 정의할 수 있습니다.

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
39
<?php 
    print "<h1>".date("F")."</h1>";
    print "Today : ".date("Y/m/d");
    print "<br>";
    $arrayweek=array("Sun""Mon""Tue""Wed""Thu""Fri""Sat");
    print "<table border=1><tr>";
    foreach($arrayweek as $value){
        print "<th>".$value."</th>";
    };
    print "</tr><tr>";
    for ($i=0$i < date("t"); $i++) { 
        $week_number=date("w"mktime(000, date("n"), $i+1, date("Y")));
        if($i==0){
            print "<tr>";
            // space_cell($week_number);
            Print_Calendar::space_cell($week_number);
        }else if($week_number==0){
            print "<tr>";
        };
        print "<td>".($i+1)."</td>";
        if($i+1==date("t")){
            // space_cell(6-$week_number);
            Print_Calendar::space_cell(6-$week_number);
            print "</tr>";
        }else if($week_number==6){
            print "</tr>";
        };
    };
    print "</table>";
    class Print_Calendar{
        static function space_cell($count){
            if($count != 0){
                for($i=0$i<$count$i++){
                    print "<td></td>";
                };
            };
        }
    };
 ?>
cs


【클래스와 메서드의 정의 방법】

1
2
3
4
5
6
7
8
9
10
11
class 클래스 이름 {
    function 메서드_이름_1(매개변수_1, 매개변수_2, ....) {
        구현하고 싶은 처리
        return 반환값(생략 가능);
    }
    function 메서드_이름_2(매개변수_1, 매개변수_2, ....){
        구현하고 싶은 처리
        return 반환값(생략 가능);
    }
    (....생략....)
}
cs



클래스에는 메서드(함수) 이외에 클래스의 변수를 정의할 수도 있습니다.




----------------------------------------------------------------------------------------------------------




객체 지향② 클래스에 정의된 메서드를 호출하는방법①


【클래스의 메서드를 호출하는 방법】

클래스_이름::메서드_이름(매개변수_1, 매개변수_2,...);




----------------------------------------------------------------------------------------------------------




객체 지향③ 클래스에 정의된 메서드를 호출하는 방법②


new 연산자를 사용하여 객체라고 불리는 '클래스로부터 만든 데이터'를 생성할 수 있습니다. 객체는 new 연산자 이외에도 프레임워크 등에서 제공하는 메서드를 사용하여 생성할 수 있습니다. 생성된 객체를 변수로 설정하고 나서, 화살표 연산자(->)를 사용하여 변수로부터 메서드 이름을 호출할 수 있습니다.

1
2
$변수_이름 = new 클래스_이름;
$변수_이름 -> 메서드_이름(매개변수);
cs



예)

1
2
$pc = new Print_Calendar;
$pc -> space_cell(6-week_number);
cs



또한, 객체를 생성하지 않고 직접 클래스로부터 메서드를 호출할 수도 있습니다. 이렇게 하려면 앞선 코드에서처럼 클래스의 메서드 앞에 static이라는 제어자를 지정해야 합니다. 클래스의 메서드 앞에는 여러 가지 제어자를 지정할 수 있는데, 설명하자면 내용이 길어지므로 생략합니다. 여기서는 단지 객체를 생성하지 않고도 클래스의 메서드를 직접 호출하려면 메서드 앞에 static제어자를 붙인다는 것만 기억합시다. 참고로 PHP5에서는 static 제어자를 붙이지 않아도 오류가 발생하지는 않지만, 앞으로 버전이 상향되면 지원하지 않을 수 있으므로 static 제어자를 붙이도록 합시다.




----------------------------------------------------------------------------------------------------------




객체 지향④ 상속


클래스의 상속이란 부모 클래스가 가진 메서드 등을 그대로 상속하여 새로운 클래스를 정의하는 것을 말합니다. 상속의 원천인 클래스를 '부모 클래스', 부모 클래스의 메서드 등을 이어받은 새로운 클래스를 '자식 클래스'라고 부릅니다.



코드 예제)

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
39
40
41
42
43
44
45
46
47
<?php 
    class Print_Calendar extends Today_Calendar{
        static function space_cell($count){
            if($count != 0){
                for ($i=0$i < $count$i++) { 
                    print "<td></td>";
                }
            }
        }
    }
    class Today_Calendar{
        function today($day){
            if(date("Y/m/d")==date("Y/m/d"mktime(000, date("n"), $day,date("Y")))){
                return "<b>".$day."</b>";
            }else{
                return $day;
            }
        }
    }
    print "<h1>".date("F")."</h1>";
    print "Today : ".date("Y/m/d");
    print "<br>";
    $arrayweek=array("Sun""Mon""Tue""Wed""Thu""Fri""Sat");
    print "<table border=1><tr>";
    foreach($arrayweek as $value){
        print "<th>".$value."</th>";
    };
    print "</tr><tr>";
    for ($i=0$i < date("t"); $i++) { 
        $week_number=date("w"mktime(000, date("n"), $i+1, date("Y")));
        if($i==0){
            print "<tr>";
            Print_Calendar::space_cell($week_number);
        }else if($week_number==0){
            print "<tr>";
        };
        // print "<td>".($i+1)."</td>";
        print "<td>".Print_Calendar::today($i+1)."</td>";
        if($i+1==date("t")){
            Print_Calendar::space_cell(6-$week_number);
            print "</tr>";
        }else if($week_number==6){
            print "</tr>";
        };
    };
    print "</table>";
 ?>
cs

부모 클래스인 Today_Calendar 클래스를 상속한 자식 클래스인 Print_Calendar 클래스는 부모 클래스가 가진 today 메서드를 자신에게 정의된 메서드처럼 사용할 수 있습니다.


부모 클래스의 메서드 등을 이어받은 자식클래스는 부모 클래스의 메서드를 자신의 메서드처럼 사용할 수 있습니다. 상속을 이용하면 클래스에 필요한 메서드를 모두 처음부터 만들 필요가 없습니다. 부모 클래스를 상속하면 부모 클래스의 메서드를 이어받아, 부모 클래스에 없는 부족한 메서드만 프로그래밍하면 됩니다. 이 프로그램에서는 11번째 행의 Today_Calendar가 부모 클래스, 02번째 행에서 Today_Calendar를 상속하는 Print_Calendar가 자식 클래스가 됩니다.

class 자식_클래스_이름 extends 부모_클래스_이름{

}



※ 상속

한마디로 클래스를 100개 정도 만들고 그런 클래스 전체에 A라는 같은 메서드를 만든다는 건 힘든일 입니다. 하지만 상속을 사용하면 A라는 메서드를 하나 정의한 클래스를 만들고 그 클래스를 100개의 클래스에서 상속해버리면 됩니다. A라는 메서드를 정의하는 클래스가 '부모 클래스', 부모 클래스를 상속해서 A 메서드를 사용할 수 있게 된 클래스가 '자식 클래스'입니다.


여기서 부모는 자식에게 뭐든 다 내줘야 하니까 부모 클래스에 있는 것을 사용하는 클래스=자식 클래스라고 기억하면 됩니다.


반응형

'메모 > PHP' 카테고리의 다른 글

배열 연산자  (0) 2017.03.13
연습문제  (0) 2017.02.20
[PHP메모] date 함수(날짜 함수)에 대해  (0) 2016.11.20
[PHP메모] foreach 문  (0) 2016.11.05
[PHP메모] 연관 배열  (0) 2016.11.05