반응형

이전 시간에 만들었던 함수를 모아 놓은 것이 클래스다. 말은 이렇게 했지만 클래스는 조금 어렵다. 클래스를 100%이해하고 일을 할 필요는 없지만 대충 어떻게 만들어져 있고 어떤걸 가져다 써야되는지 또 어디서 확인해봐야하는지등은 알아야 하겠기에 다음 내용을 잘 읽어보고 모르겠으면 그냥 넘어가도 된다. 지금 이걸 꼭 다 알 필요는 없다. 자꾸 하다보면 자연스럽게 알아지기도 한다.

 

다음 파일을 만들어보자.

 

/test.php

<?php include $_SERVER["DOCUMENT_ROOT"]."/inc/dbcon.php";
ini_set( 'display_errors', '0' );
class Members {//클래스의 이름 보통 첫글자를 대문자로 사용, MemberClass 이런식으로 카멜표기법사용
    private $name;//클래스에서 사용하는 변수 선언, private은 클래스 안에서만 사용,
    protected $email;//protected는 확장 클래스에서도 사용

    public function __construct(){//생성자, 클래스를 선언할때 제일 먼저 작동, 아래 내용은 해당 변수에 값을 입력함.
        $this->name = "tester";
        $this->email = "t@t.com";
    }

    public function disp(){
        echo "name is ".$this->name;
        echo "<br>";
        echo "email is ".$this->email;
    }

    public function minfo($userid){
        global $mysqli;
        $query = "select username,email from members where userid='".$userid."'";
        $result = $mysqli->query($query) or die("query error => ".$mysqli->error);
        $rs = $result->fetch_object();
        $this->name = $rs->username;
        $this->email = $rs->email;
        return $this;
    }

    public static function minfo2($userid){
        global $mysqli;
        $query = "select username,email from members where userid='".$userid."'";
        $result = $mysqli->query($query) or die("query error => ".$mysqli->error);
        $rs = $result->fetch_object();
        $userinfo[0] = $rs->username;
        $userinfo[1] = $rs->email;
        return $userinfo;
    }
}
echo "<pre>";
$member = new Members();//Mebers클래스를 사용하기 위한 인스턴스 생성
$member->disp();//인스턴스를 이용해 Members클래스안에 있는 disp()함수를 호출. 현재 생성자에서 만든 변수값들을 출력
echo "<br>";
echo $member->minfo('admin')->disp();
echo "<br>";
$minfo=Members::minfo2('admin');
print_r($minfo);
echo "<br>";
$minfo2=$member->minfo2('admin');
print_r($minfo2);
echo "<br>";
?>

전형적인 클래스의 모습을 하고 있다. 클래스 안에 생성자가 있고 각각 함수들이 포함돼 있다. 클래스 이름이 Members인것으로 보아 회원 정보에 대한 함수들을 모아 놓은 것으로 예상된다.

$member = new Members();//Mebers클래스를 사용하기 위한 인스턴스 생성

이부분이 Members 클래스를 가져다 쓰려고 인스턴스라는 걸 만드는 과정이다. $member 변수가 인스턴스가 돼서 Members클래스 안에 있는 변수나 함수등을 가져다 쓸 수 있게 된다.

$member->disp();//인스턴스를 이용해 Members클래스안에 있는 disp()함수를 호출. 현재 생성자에서 만든 변수값들을 출력

위에 선언한 인스턴스 $members를 통해서 disp()함수를 호출했다. '->' 이런 모양으로 불러온다. 별다른함수 호출 없이 바로 disp()를 호출 했기때문에 해당 변수에는 생성자에서 선언한 변수들이 들어가 있을 것이다.

 

echo $member->minfo('admin')->disp();

이번엔 minfo함수를 호출했다. minfo함수는 특정 사용자의 이름과 이메일을 구해서 변수에 집어 넣었다. 그리고 disp()함수로 출력해주는 것이다. 그러니 화면에는 admin의 이름과 이메일이 표시될 것이다.

 

$minfo=Members::minfo2('admin');

그다음에 있는 minof2를 불러올때의 모양이 조금 다르다. 이 함수는 public static function minfo2($userid)로 선언했기때문이다. static이 있는 경우는 클래스 내부의 변수를 이용하지 않고 바로 리턴값을 받아 오는 경우에 많이 사용한다. static인 경우에는 인스턴스를 생성하지 않고 저런 모양으로 함수를 불러 올 수 있다.

 

$minfo=Members::minfo2('admin');

앞으로도 이런 모양을 많이 보게 될 것이다. 이런 모양을 보면 쫄 필요가 없다. 아 클래스 안에 함수를 불러 왔구나. minfo2위에 커서를 두고 F12키를 누르면 함수의 내용을 볼 수 있도록 커서를 해당 함수위로 이동시켜준다. 누가? 비쥬얼스튜디오코드가.

 

물론 이렇게 안쓰고 인스턴스를 이용해 $minfo2=$member->minfo2('admin');  이렇게 써도 되지만 보통은 위에 처럼 쓴다.

 

위 파일을 실행하면 아래와같은 결과 화면이 나온다.

 

name is tester
email is t@t.com
name is 운영자
email is admin@admin.com
Array
(
    [0] => 운영자
    [1] => admin@admin.com
)

Array
(
    [0] => 운영자
    [1] => admin@admin.com
)

물론 내 화면의 결과값가 다를 순 있을 것이다. 다만 형식은 비슷해야한다. 오류가 난다면 될때까지 해보고 그래도 안되면 댓글로 질문을 하시라.

 

이번 시간엔 간단하게 클래스의 아주 기본적인 내용을 알아봤다. 읽어봐도 잘 모르겠으면 넘어가도 된다. 어차피 자주 보면 다 할 수 있게 된다.

 

다음엔 상속이란 걸 해볼것이다. 상속이란 것도 실제 일할때 많이 사용한다.

 

함수와 클래스를 알아야하는 이유는 여러분들이 앞으로 PHP에 관한 일을 한다면 99%의 확률로 남이 만든 함수와 남이 만든 클래스를 사용해 작업을 해야 하기 때문이다. 아예 아무것도 모르면 일을 할 수가 없다. 아니 할 수 없진 않고 어렵다. 100% 알고 일을 하면 좋겠지만 그것도 불가능한 일이니 기본적인 것만이라도 확인하고 넘어가는 것이 좋다.

반응형

+ Recent posts