php7.4 이상? 에서 에러가 발생하는
array 가 아닌 변수에 in_array() 등이 사용될 겨우 에러를 방지하기 위해
in_array($val, $array?:[])
?:[] 이렇게 붙여주라고 해서 해결되는 것 까지 이해했었습니다.
그런데 이게 왜 ? 뭐지? 라고 정확히 이해를 해보려고 하는데 참조할 만한 문서가 마땅치 않네요.
혹시 이게 if 축약식 인가요?
$array?$array:$array[]
이것과 같은 의미인가요?
같은 의미라면 왜 $array 가 생략될 수 있는지 이해가 잘 가지 않구요.
혹시 제가 추측하는 것이 틀렸다면
$array?:[] 정확한 의미가 무엇이고 용법이 궁금합니다.
if 축약식 문서를 읽어봤을때는
조건?참일때 실행:거짓일때 실행
위와 같이 이해했는데
$array?:[]
여기에는 참일때 그냥 빈칸이고 거짓일때는 [] 배열을 의미하는 기호 뿐이라.....
$array ? $array : [] 의 축약형이 맞습니다.
PHP 5.3 이후 모든 버전에서 A ? A : B 의 형태는 A ?: B 로 줄여쓸 수 있습니다.
A가 참이면 A를 그대로 쓰고, 아니면 B로 대체합니다.
func() ? func() : B 이렇게 특정 함수의 실행 결과를 가지고 판단해야 할 경우,
원래 문법을 쓰면 (결과를 따로 변수에 담지 않는 이상) 함수를 두 번 실행하는 비효율이 발생하는데
축약형은 한 번만 실행할 수 있다는 장점도 있습니다.
비슷한 문법으로 A ?? B 가 있는데요, 이건 isset(A) ? A : B 의 축약형입니다.
이건 A가 참인지 거짓인지 따지는 것이 아니라 A라는 변수가 존재하는지 아닌지를 따집니다.
PHP 8.0 이상 버전에서 존재하지 않는 변수를 참조할 때 발생하는 워닝을 해결하기 위해
코어에서도 광범위하게 활용하고 있습니다.