PHP 7.0에서 새로 나온 NULL 병합 연산자 – ??

php7의 여러 기능중 정말 쏠쏠하게 써 먹는 기능이 ?? 연산자(operator)다. 아래처럼 활용한다.

$user = $_GET['user'] ?? '';
$name = $name ?? '';
$is_print = $config['is_print'] ?? false;

좀더 자세히

전에는 $_GET['user'] 같은 것을 받을 때 이게 세팅돼 있는지 검사부터 해야 했다. 아래처럼 말이다.

$user = '';
if (!empty($_GET['user']) {
    $user = $_GET['user'];   
}

$_GET['user']가 설정돼 있지 않은데 if ($_GET['user']) { 식으로 검사하면 변수가 설정돼 있지 않다는 메시지가 뜬다(PHP Notice: Undefined index: user in php shell code on line 3).

3항 연산자(Ternary Operator)로 축약해 사용하는 경우가 많은데, 역시 검사를 해야 했다. 아래처럼 쓰면 노티스가 뜬다.

$user = $_GET['user'] ?: '';

그래서 불편하게 아래처럼 써야 했다.

$user = (!empty($_GET['user'])) ? $_GET['user'] : '';

하지만 PHP 7.0부터는 아래처럼 쓰면 된다.

$user = $_GET['user'] ?? '';

노티스가 뜨지 않는다. ??가 null 병합 연산자다. 앞의 변수가 설정돼 있지 않으면 뒤의 것을 사용한다.

공식 설명은 Migrating from PHP 5.6.x to PHP 7.0.x의 Null coalescing operator 항목을 참고하자.

카테고리

대표글

댓글 남기기