PHP & Others

클래스 로더

컨텐츠 정보

본문

모듈의 load와 unload를 효율적으로 관리하다 보면 클래스 로더가 유용한 경우가 많이 있습니다.
제 경우는 사용하는 클래스중 기본 매개변수를 받는 녀석들이 좀 있어서 매개 변수를 처리할 방법을 생각하다가 eval 이라는 엽기적인 결론에 도달해버렸습니다.
다음은 제가 사용하는 webapp 클래스의 일부입니다.

class WebApp {

    function import($module) {
        $file = "class.$module.php";
        require_once($file);
        return true;
    }

    function init($module) {
        if (WebApp::import($module)) {
            $argv = func_get_args();
            unset($argv[0]);
            $params = array();
            foreach ($argv as $param) {
                $param = (is_numeric($param)) ? $param : "\\"$param\\"";
                $params[] = $param;
            }
            $params = implode(',',$params);
            eval("\\$o = new $module($params);");
            return $o;
        }
    }
}

// examples

$DB = WebApp::init('DB');
$AQ = WebApp::init('AutoQuery','az_member');

-_-;;

 
 

 
- FLUTIA
호오.. eval 이라.. 괜찮은데요. ^_^ 08/17 10:19:46 
 
- sh.
${$o} = new ${$module}($params);
로 처리해도 같은 것이겠네요. 08/18 10:22:37 
 
- sh.
$params = implode(',',$params);
이 부분을 제가 잘못 이해했군요. 굳이 eval을 사용한 이유를 이해했습니다 :) 08/18 18:06:22 
 
- sh.
아 그런데, $params에 "나 '가 escape되지 않더군요.
init메쏘드의 foreach안쪽을
$param = (is_numeric($param)) ? $param : "\\"".addslashes($param)."\\"";
이런식으로 처리해주어야 할듯합니다.
한수 배웠습니다 감사합니다^^ 08/18 18:24:59 

- 거친마루
네^^ slash 처리에 대해서는 생각하고 있었습니다만..
아직은 저 혼자 쓰는중이라 제가 조심하면 올바르지 않은 파라미터가 들어갈 경우가 생기지 않아서 아직 방치하고 있습니다 ^^ 많은 사람들이 사용하는 일반적인 방법이 된다면 slash 처리뿐 아니라 악성코드 사용 가능성에 대해서도 철저히 따져 막아야겠지요 ^^

관련자료

댓글 0
등록된 댓글이 없습니다.
Today's proverb
유쾌한 사람은 자기 일에만 몰두하는 사람이 아니다. 때론 자신의 일을 전부 제쳐놓고 타인의 문제에 전력을 쏟는 열정이 있는 사람이다. 타인에게 자신의 힘을 나누어주고 마음을 열어주는 것은 자신의 삶을 행복하게 만드는 방법이다.