[PHP] class 자동 로딩(autoload)
지속적으로 class 파일이 늘어 남으로 인해서 include, require 를 사용하기도 힘들어지기도 합니다.
그래서 최상단에 모든 파일이 1개 파일을 호출 하면은 class 파일은 자동으로 로딩하도록 하기 위해서 PHP에서 제공하는것을 사용해서 사용을 하고 있습니다.
/* 편의상 comm.php 라고 해당 파일을 명명하겠습니다. */
define('_CLASSPATH_', '/home/user/class');
spl_autoload_register(function ($class) {
require_once (_CLASSPATH_.'/class/'.$class.'.class.php');
});
위에 파일을 하나 만들고 사용하고 싶은곳은 파일에서 위의 파일을 include, require 하면 됩니다.
이렇게 하면은 class 파일간에 상속이 필요하지 않습니다.
제가 만들다가 알게 된것이라서 100% 공식적인 기능이라고 생각 하지 않지만 저는 잘 사용하는 편입니다.
class 파일은 welcome.class.php , getout.class.php 파일입니다.
실제 실행되는파일은 main.php 파일입니다.
main.php 파일은 welcome.class.php 을 선언하고 사용을 하지만은 올바르지 않으면은 쫒아 내려고 합니다.
welcome.class.php 파일은 일단 환영을 하도록 되어 있지만 쫒아내는 기능은 없습니다.
저는 예전에는 main.php 파일에서 welcome.class.php 도 포함하고 getout.class.php 도 포함해서 사용을 했지만은 지금은 이렇게 사용을 하고 있습니다.
main.php 에서 welcome.class.php 포함해서 사용을 하다가 welcome.class.php 파일에서 getout.class.php 파일을 선언해서 사용을 합니다.
그러면은 main.php 파일은 깔끔하게 welcome.class.php 만 호출하기에 가편하기도 한것 같고요…
아래에 한번 예제적으로 소스 코드 적어 보겠습니다.
아래 main.php에서는 1개의 클래스 파일만 조회하면은 됩니다.
주 목적이 해당 사용자에게 인사를 하는것이지 체크를 하기 위해서는 아닙니다.
그렇기에 main.php에서는 인사를 보여주도록 합니다.
/* main.php */
$welcomeObj = new Welcome();
echo $welcomeObj->accessCheck();
이제 인사쪽에서 와서는 이 사람이 정식적으로 허가가 된 사람인지도 알아야 합니다.
하지만 자기 본래 기능은 인사이지 다른 기능이 아닙니다.
그래서 쫒아낼지에 대해서는 알 수 없어서 해당 class 파일에게 요청을 합니다.
/* Welcome.class.php */
class Welcome {
function accessCheck()
{
$getoutObj = new Getout();
$data = $getoutObj->check();
if( isset($data) ) {
return '잘 들어왔어요';
} else {
return null
}
}
}
쫒아낼지 결정하는 class 파일에서는 일단 들어온 요청으로 값을 체크해서 정확한지 판단을 합니다.
이 사람이 정상적이면은 통과하고 아니면은 쫒아내라고 할수 있고 그 자리에서 멈춰서 더 이상 실행이 되지 않도록 할수도 있습니다.
/* Getout.class.php */
class Getout {
function check()
{
if( 접속자 == 허용) {
return true;
} else {
return false;
}
아직 배우는 입장이여서 정확하게 설명을 부족하지만은 class 파일이 이렇게 긴밀하게 연결되는것은 좋지 않다고 생각도 하지만은 class 파일은 자신의 할일은 명확해야 합니다.
만약 사용자 접근을 동일 class 안에서 모두 처리하면 class 내에 파일이 지저분하게 늘어나기도 하고, 어떤곳은 수정이 되지만 어떤곳은 되지 않는 경우도 발생을 합니다.
그래서 class 파일은 명확한 일을 하고 그 해당 일이 아닌것은 다른곳에서 도움을 받고 그 결과값을 받아야 한다고 생각을 합니다.
서로 서로 연결되다 보면은 전달하는 인자값이나 결과값을 모두 생각해야 되기 때문에 정확하게 작성하고 파일에 대한 설명도 정확하게 있어야 할것 같습니다.
더욱더 열심히 공부를 해서 좀 더 정확하게 한번 해보도록 하겠습니다.