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 처리뿐 아니라 악성코드 사용 가능성에 대해서도 철저히 따져 막아야겠지요 ^^

관련자료

등록된 댓글이 없습니다.
Today's proverb
무엇인가를 이루려고 하는 마음이 없다면 세상 어디를 가나 두각을 나타낼 수가 없다. 무지함을 두려워 말라, 거짓 지식을 두려워 하라. (파스칼)