PHP Class 기본 사용법

2017. 12. 31. 10:51개발을 파헤치다/PHP

반응형


Class는 왜 만들어야하는가?

웹 개발을 하다 보면 공통적으로 사용하는 코드가 꽤나 많습니다.

예를 들면,

  • 클라이언트에서 서버쪽으로 HTTP 요청 보내기
  • 서버쪽에서 로그인한 사용자의 세션 관리하기
  • 서버단 언어(예를 들면 PHP같은)로 데이터베이스에 접근하여 조회, 수정 및 삭제하기

로그인 페이지를 만들다가 회원 목록 페이지를 새로 만들었다고 해보죠.

그러면 세션 관리하는 코드 추가해줘야죠.

서버에서 데이터 받아오려면 HTTP 요청하는 코드도 추가해줘야죠.

데이터베이스에서 가져올 정보가 있으면 DB 연결부터 쿼리날리고 결과값 JSON으로 바꾸는 코드가 또 추가됩니다.

하.....

문제는 코드 수정이 있을 때에요.

만약 호스팅 서버를 이전해서 주소가 바뀐다면??

페이지들마다 DB 관련된 부분 모두 수정해줘야 합니다.

말도 안되죠? 네 말도 안됩니다.

그래서 Class를 사용하는 것이죠.

Class를 사용하면 코드 유지 보수에 기가 막히게 도움이 됩니다.

  1. 중복되는 코드들을 제거해서 코드 가독성이 올라가죠.
  2. 나중에 수정할 때에도 Class안의 내용만 수정하면 됩니다.
    Class를 선언해서 사용하는 쪽에서는 내용이 바뀌던 구워 삶아먹던 상관이 없습니다.


이렇게 말로만 하면 이해가 힘드니 바로 Class를 사용해보도록 하죠!

Class 사용하기

Class를 사용하지 않은 기존 코드


//세션을 시작한다
session_start();

//로그인하지 않았거나 로그인 유효시간이 지나면 로그인 페이지로 이동
if(!isset($_SESSION["user_email"]) || isLoginExpired($_SESSION["sign_in_timestamp"]))
{
    header("Location: sign_in.php");
}
else
{
    $_SESSION["sign_in_timestamp"] = time();    //로그인 유지시간을 갱신해준다
}
클래스를 적용하지 않은 코드는 위와 같이 사용자 접근 관리와 관련된 코드를 새로운 페이지가 만들어질 때마다 복붙해야 합니다.

ㅎㄷㄷ 못하겠네요 전.

나중에 유지보수 할 때 어떡하나요? 일일히 하나하나 고치고 다녀야 하나요?

말도 안되죠.

//Session Manager 클래스를 자동 로드한다
function __autoload($className){
    include $className . '.php';
}

$session_manager = new SessionManager();    //세션 관리자를 생성

//유효한 접근이 아니거나 로그인 유효시간이 지나면 로그인 화면으로 이동
if(!$session_manager->isValidAccess() || $session_manager->isLoginExpired())
{
    $session_manager->destroy_session();
    header("Location: sign_in.php");
}
//로그인 유효시간을 갱신
else{
    $session_manager->update_active_time();
}
클래스를 사용하면 위와 같은 문제가 사라집니다.

일단 코드 가독성도 훨씬 좋아지구요.

Session Manager라는 클래스에서 로그인 관리를 해주는데 여기에서 제공하는 메서드를 사용하기만 하면 됩니다.

유효성을 판단하는 로직이 변경되거나 새로운 내용이 추가되어도 Session Manager 클래스의 내용을 바꾸면 되죠.

위의 내용만 모든 페이지에 있으면 되고 수정 사항이 있으면 Session Manager 클래스에서 고치면 되는 겁니다.

훨씬 깔끔하죠.

그럼 Session Manager 클래스가 어떻게 생겼는지 한번 살펴볼까요?


PHP에서 세션관리하는 Class 만들기

class SessionManager
{
    var $last_active_time;      //마지막 활동시간
    var $user_email;            //사용자 이메일


    function __construct()  //생성자
    {
        session_start();    //세션을 시작한다
        $this->user_email = $_SESSION["user_email"];    //멤버변수 접근은 this를 사용해서 한다
        $this->last_active_time = $_SESSION["sign_in_timestamp"];
    }

    /*
 *      로그인 유효성을 검사하는 메서드
 * */
    function isLoginExpired()
    {
        $result = false;
        if((time() - $this->last_active_time) > 1800)    //30분동안 활동이 없으면 자동 로그아웃된다
        {
            $result = true;
            session_destroy();
        }
        return $result;
    }

    /**
            세션을 종료한다
     */
    function destroy_session()
    {
        session_destroy();
    }

    /**
        접근 유효성을 검사한다
     */
    function isValidAccess()
    {
        $result = false;

        if(isset($this->user_email))
            $result = true;

        return $result;
    }

    /**
        로그인 유지시간을 갱신한다
     */
    function update_active_time()
    {
        $_SESSION["sign_in_timestamp"] = time();
        $this->last_active_time = $_SESSION["sign_in_timestamp"];
    }

}
이렇게 PHP에서 클래스를 적용해보았습니다.

클래스를 사용하면 확실히 좋은 점들이 있으니, 개발하실 때 앞에서 다루었던 내용들을 떠올리면서 코딩하시면 좋을 것 같습니다.

Reference

  1. 현대인의 PHP → http://www.haruair.com/blog/3301
  2. PHP Class 자동으로 불러오기 → http://www.haruair.com/blog/2323
  3. PHP Class 만들기 → http://hyeonstorage.tistory.com/115
  4. PHP Class 메서드, 상속 → http://hyeonstorage.tistory.com/116


반응형