PHP 7부터 새롭게 도입된 이중 물음표(??) 연산자는 널 병합 연산자(Null Coalescing Operator)라고 불립니다.
이 연산자는 첫 번째 피연산자가 존재하고 NULL이 아닐 경우 그 값을 반환하며, 그렇지 않으면 두 번째 피연산자를 반환합니다. 값의 평가는 왼쪽에서 오른쪽 순서로 진행되며, 필요에 따라 여러 개의 피연산자를 체인(chain) 형태로 연결해 사용할 수도 있습니다.
쉽게 말해, 변수에 값이 이미 들어 있다면 그 값을 사용하고, 값이 없거나 NULL이라면 지정한 기본값을 대신 사용하는 아주 편리한 문법입니다.
예제 1: 기본 사용법
<?php
// $a는 정의되지 않음
echo $a ?? 9 ?? 45;
?>실행 결과
9
$a가 정의되어 있지 않으므로(NULL 상태), 널 병합 연산자는 다음 피연산자인 9를 반환합니다. 이처럼 앞의 값이 유효하지 않으면 자동으로 뒤의 값으로 넘어갑니다.
예제 2: 변수와 함께 사용하기
<?php
// $a는 정의되지 않음
$b = 34;
echo $a ?? $b ?? 7;
?>실행 결과
34
$a가 정의되지 않았기 때문에 다음 피연산자인 $b의 값 34가 반환됩니다. 만약 $b마저 정의되어 있지 않았다면 마지막 값인 7이 출력되었을 것입니다.
기존 방식과의 비교
PHP 7 이전에는 같은 기능을 구현하기 위해 isset()과 삼항 연산자를 조합해야 했습니다.
// 기존 방식 $value = isset($a) ? $a : '기본값'; // 널 병합 연산자 사용 $value = $a ?? '기본값';
널 병합 연산자를 사용하면 코드가 훨씬 간결해지고 가독성도 크게 향상됩니다. 특히 사용자 입력값이나 설정값 처리 시 기본값을 지정하는 용도로 널리 활용됩니다.