WEB언어/PHP

[펌] PHP 7.0에서 새로 나온 NULL 병합 연산자 - ??

saltdoll 2018. 4. 14. 03:00
반응형

PHP7 에서 새롭게 나온 연산자에 대한 글을 가져와습니다.




출처: https://mytory.net/2017/11/13/php-7.0-null-coalescing-operator.html




경우에 따라 3항 연산자보다 편하게 사용할 수 있는 ?? 연산자를 소개한다.


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 병합 연산자다. 앞의 변수가 설정돼 있지 않으면 뒤의 것을 사용한다. ($_GET['user']가 null이면 ''를 $user변수에 추가해주는 것입니다.)

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


ex)

$person->name ?? 'Guest';

해당 객체의 호출값이 null이면, Guest를 넘겨줍니다.

반응형
도움이 되셨다면 하트모양의 "♡ 공감"을 눌러주시면 큰 격려가 됩니다.
(로그인하지 않으셔도 가능)