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 항목을 참고하자.