PHP의 ?: vs ?? 연산자: 차이점과 사용법
PHP에서 ?:
(엘비스 연산자)와 ??
(Null 병합 연산자)는 비슷해 보이지만 중요한 차이가 있다. 두 연산자의 특징, 차이점, 그리고 적절한 사용 상황에 대해 알아보자.
1. ?? (Null 병합 연산자)
- PHP 7.0에서 도입
- 구문:
$result = $a ?? $b
- 동작:
$a
가 NULL이 아니면$a
를 반환$a
가 NULL이면$b
를 반환
- 특징: 오직 NULL 값에 대해서만 대체 값을 제공
예시:
$username = $_GET['user'] ?? 'Guest';
이 코드는 $_GET['user']
가 설정되지 않았거나 NULL일 때만 'Guest'를 사용.
2. ?: (엘비스 연산자)
- PHP 5.3에서 도입
- 구문:
$result = $a ?: $b
- 동작:
$a
가 true로 평가되면$a
를 반환$a
가 false로 평가되면$b
를 반환
- 특징: 모든 "falsy" 값에 대해 대체 값을 제공
예시:
$displayName = $username ?: 'Anonymous';
이 코드는 $username
이 비어있거나, 0, false, NULL 등 "falsy" 값일 때 'Anonymous'를 사용.
3. 주요 차이점
두 연산자의 가장 큰 차이는 "falsy" 값을 어떻게 처리하는지에 있다.
??
는 오직 NULL 값에 대해서만 대체 값을 제공?:
는 모든 "falsy" 값(0, '' (빈 문자열), false, [], NULL 등)에 대해 대체 값을 제공
비교 예시:
$a = null;
$b = "";
$c = 0;
$d = false;
echo $a ?? "default"; // 출력: default
echo $b ?? "default"; // 출력: (빈 문자열)
echo $c ?? "default"; // 출력: 0
echo $d ?? "default"; // 출력: (빈 문자열, false를 문자열로 변환)
echo $a ?: "default"; // 출력: default
echo $b ?: "default"; // 출력: default
echo $c ?: "default"; // 출력: default
echo $d ?: "default"; // 출력: default
4. 언제 어떤 연산자를 사용해야 할까?
??
사용:- 변수가 정확히 NULL인 경우에만 대체 값을 사용하고 싶을 때
- 0, 빈 문자열 등을 유효한 값으로 취급하고 싶을 때
?:
사용:- 변수가 "set"되었는지 확인하고 싶을 때 (isset()과 비슷한 동작)
- false, 0, 빈 문자열 등도 "비어있음"으로 간주하고 싶을 때
결론
??
와 ?:
는 비슷해 보이지만 각각 다른 상황에서 유용함. 코드의 의도와 처리하려는 값의 특성을 잘 이해하고 적절한 연산자를 선택하는 것이 중요하다.
'IT > php' 카테고리의 다른 글
[PHP] 자식 클래스에서 상속 받은 const 값 선언 강제 하는법 (0) | 2024.02.07 |
---|---|
[PHP] Carbon 사용시 주의점 (0) | 2023.02.02 |