반응형
Web Development · PHP
PHP 오류 제어 연산자 —
@ (at-sign)
경고/알림 메시지를 한 줄에 한해 숨기기
시작 오늘 분석할 코드
존재하지 않을 수도 있는 배열 키를 접근할 때 @를 붙여 경고를 화면에 띄우지 않게 한다.
<?php $string = @$data[$key]; // $data가 없거나 $key가 없어도 경고 X print "오류제어 연산자 테스트"; ?>
용어 핵심 키워드
@한 표현식 앞에 붙여 경고 억제
"오류 제어"실은 "오류 메시지 억제"
try-catch정식 예외 처리 — 권장
isset()키 존재 검사 — 더 깔끔
??null 합병 (PHP 7+) — 가장 모던
성능 비용@는 사실 느림 — 내부적으로 처리
1 @의 정확한 의미
@는 "이 표현식에서 발생하는 PHP 경고/알림 메시지를 화면에 표시하지 마라"이다. 오류 자체를 막는 게 아니다 — 그냥 메시지만 숨긴다.
// @ 없이 $x = $arr['no_key']; // Notice: Undefined index: no_key in ... // @ 사용 $x = @$arr['no_key']; // 메시지 없음 — $x는 null
2 권장하지 않는 이유
- 버그를 숨김 — 문제가 보이지 않으니 디버깅이 매우 어려움
- Fatal error는 못 막음 — 치명적 오류는 그대로 발생
- 성능 저하 — PHP는 @ 표현식에서 잠시 오류 보고를 끄고 다시 켠다 (느림)
- 코드 의도 불명 — 왜 @를 붙였는지 다음 사람이 모름
⚠ "안 됐는데 왜인지 모름" — @를 남용한 코드의 가장 큰 부작용. 며칠 동안 디버깅하고 보면 결국 @ 때문인 경우가 많다.
3 더 나은 방법들
// 1) isset() — 키 존재 확인 (구식이지만 명확) $string = isset($data[$key]) ? $data[$key] : ""; // 2) ?? null 합병 (PHP 7+ — 가장 모던) $string = $data[$key] ?? ""; // 3) try-catch (예외 발생 코드용) try { $content = file_get_contents($path); } catch (Exception $e) { $content = ""; }
반응형
4 그래도 @를 쓸 만한 곳
드물게 정당한 경우:
@unlink($file)— 파일 없어도 OK인 삭제@fopen()— 실패해도 처리 가능 (보통 try-catch가 더 좋음)- 레거시 코드 호환
거의 모든 경우 ?? 또는 isset이 더 좋다.
5 error_reporting과의 관계
전역 오류 보고 설정은 php.ini에서 error_reporting으로 한다. @는 한 줄짜리 임시 무시일 뿐이다.
// 개발 환경 — 모든 오류 보임 error_reporting(E_ALL); ini_set('display_errors', 1); // 운영 환경 — 화면 X, 로그만 ini_set('display_errors', 0); ini_set('log_errors', 1);
핵심 한 줄 요약
@한 줄 경고 메시지 억제
오류는 그대로메시지만 숨김 — 버그 숨김
권장 X디버깅 지옥, 성능 저하
대안 ??$arr[$k] ?? "" (PHP 7+)
대안 issetisset(...) ? ... : ...
예외 코드try-catch가 정석
Tags
#PHP #오류제어 #at-operator #suppress #isset #null-coalescing #try-catch #디버깅 #백엔드 #CSS #HTML #웹개발 #티스토리
▼ 티스토리 태그 입력란 복사용
PHP, 오류제어, at-operator, suppress, isset, null-coalescing, try-catch, 디버깅, 백엔드, CSS, HTML, 웹개발, 티스토리
반응형
'php' 카테고리의 다른 글
| PHP 배열 변수 선언 — array() 한 줄 완전 정리 (0) | 2026.06.26 |
|---|---|
| PHP 백틱 — 셸 명령 실행 완전 정리 (0) | 2026.06.26 |
| PHP 비트 AND 연산자 — & 완전 정리 (0) | 2026.06.26 |
| PHP 참/거짓 — true, false, == 완전 정리 (0) | 2026.06.26 |
| PHP 삼항 연산자 — ?: 한 줄 if-else 완전 정리 (0) | 2026.06.26 |
왕진 블로그

댓글