본문 바로가기
IT 실무/웹프로그래밍

PHP에서 파라미터 넘겨 받아 초기값 세팅하기

by 지식id 2022. 5. 29.
반응형

일반 GET 또는 POST 파라미터인 경우

 

$param = $_GET['param'] ?? null;

 

이는 'param' 이라는 파라미터가 아예 세팅되어 오지 않은 경우에 해당하는 예외처리 방법이다. 아래와 같다.

 

$param = isset($_GET['param'])?$_GET['param'] : null;

 

호출이 아래와 같이 무작위로 들어올 수 있는 상황에서, notice나 warning을 방지하기 위한 방법으로 활용될 수 있다.

 

http://host.com/test.php?param= 

http://host.com/test.php 

 

하지만 아래와 같이 초기 값을 할당하려고 하는 경우엔 활용할 수 없다.

$param = $_GET['param'] ?? 0;
$param = $_GET['param'] ?? 'defualt';

 

이렇게 초기화하려고 하면 값은 그냥 무값('')이다. 0이나 default가 들어가지 않는다. 만약 0이든 특정 값이든 뭔가 의미 있는 값을 초기값으로 세팅하고 싶은 경우, 불가피하게 다소 복잡하게 세팅해줘야 한다.

 

$param = $_GET['param'] ?? null;
if(!$param) $param = 'default';

// 한줄로 하려면 아래와 같이 하면 된다.
$param = ($_GET['param '] ?? null) ? $_GET['param '] : 'default';

 

저기서 ?? null 부분을 삭제하면 unidentified index 라는 notice를 맞이하게 된다. 크리티컬하지 않은 에러메시지는 다 무시하고 notice나 warning에 민감하지 않다면 그렇게 해도 상관 없다. 사실 명확히 하기 위해선 값을 받는 부분과 default 값을 세팅하는 부분을 두줄로 명확히 나누는게 더 좋을 수 있다. ?? 는 그냥 그런 변수가 들어올 수 있다는 걸 명확히 하고, 값이 안들어올 경우 null 이라도 넣어주기 위해 쓰는 것이지, 내가 원하는 초기값을 넣기 위해 쓰는 것이 아니다.

 

다만, 정수형 변수를 활용한다고 치고, 초기값을 0으로 세팅하고 싶은 경우엔 예외적으로, 아래와 같이 깔끔하게 활용 가능하다.

 

$param = @(int) $_GET['param'] ?? 0;

 

이렇게 입력을 받으면, param 값이 세팅이 안 되어 있든, 빈 값으로 세팅되어 있든, 이상한 문자열이 들어가 있든, 제대로된 정수 값이 아니라면 0으로 잘 초기화 된다.

 

어떻게 하든 다소 지저분한 방법들인 건 어쩔 수 없다. 그래서 변수를 전달받는 것이 빈번한 프로그램의 경우 get_int, get_str 같은 함수를 하나 만들어두는 것도 괜찮다. 경우에 따라선 get_arr이든 get_float 등도 추가로 만들 수 있다.

 

function get_int($intVar, $default=0) {
    if(!$intVar) return $default;
    return (int)$intVar;
}

 

물론 이렇게 하는 경우에도 값이 아예 세팅되지 않은 경우 unidentified index는 발생한다. 즉 @ 와 함께 사용해야 한다.

 

$param = @get_int($_GET['param'])

 

나의 경우 get_int와 get_var, get_arr 세가지만 사용한다. float 등 다른 변수형은 별로 쓸 일이 없어서

 

function get_var($var, $default='') {
    if(!$var) return $default;
    return $var;
}

function get_arr($arr, $default=array()) {
    if($arr && is_array($arr)) return $arr;
    return $default;
}
반응형

댓글