PHP 스타일 가이드 제안: 괄호와 중괄호 사용 규칙
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
개발 툴
대상자
PHP 개발자 및 팀 협업 환경에서 작업하는 개발자
- 난이도: 중간 (기본 문법 이해 필요)
핵심 요약
- 일관된 문법:
if($x) { ... }
와foo($y) { ... }
처럼 괄호 앞 공백 없음 - 중괄호 위치: 조건문/함수 정의 시 중괄호는 줄내림 없이 줄 시작 (
if($x) { ... }
) - 예외 제거:
if/else
나try/catch
블록은 이전 블록의 중괄호 끝 뒤에 새 줄 사용 (if($x) { ... } else { ... }
) - 자동화 도구 호환성:
PHP-CS-Fixer
와 같은 도구와 완전 호환
섹션별 세부 요약
1. 서론: 문법의 목적과 원칙
- 문법의 목적: 코드가 논리 구조를 반영하도록 하기 위해 기존 전통적 규칙 대신 구문 기반의 일관된 규칙 제안
- 핵심 원칙:
- if
, while
, foo()
등의 구문 유형별로 괄호 사용 규칙 동일
- 중괄호 {}
는 블록 범위 지정자로, 문맥에 관계없이 일관된 위치 적용
- 문제점: PSR-12 등 기존 가이드에서
if
와foo()
에 다른 공백 규칙 적용 → 불필요한 인지 부하 유발
2. 기존 가이드의 문제점
- 구문 유사성 vs. 형식 차이:
- function foo() { ... }
(함수 정의) vs. if ($x) { ... }
(조건문) → 다른 줄 바꿈 규칙
- 문법적 필요성 없이 형식 차이 적용 → 자동화 도구 복잡화, 협업 시 스타일 논쟁 유발
- 예시:
```php
// PSR-12 기준
function foo() {
// ...
}
if ($x) {
// ...
}
```
3. 제안된 규칙
- 괄호 사용:
- 모든 구문에 공백 없음: if($x)
, foo($z)
- 중괄호 위치: 조건문/함수 정의 시 줄 시작에 배치 (if($x) { ... }
)
- 중괄호 종료: 줄 끝에만 배치, 블록 시작 위치와 수직 정렬
- 예시:
```php
if($x) {
// ...
} else {
// ...
}
```
4. 특별한 경우: `if/else` 및 `try/catch`
- 기존 스타일:
```php
if($x) {
// ...
} elseif($y) {
// ...
}
```
- 제안된 변경:
- if/else
블록은 이전 중괄호 끝 뒤에 새 줄 사용 → 수직 구조 확보
- 예외 제거: 모든 블록(if
, else
, try
, catch
)은 이전 블록의 중괄호 끝 뒤에 새 줄 사용
5. PHP 7.4 이후 구문: `fn`
- 규칙:
- fn
과 (
사이 공백 금지: $f = fn($x) => $x + 1;
- 중괄호 제외: 표현식 수준 구문 → 표현식 포맷 가이드 적용
- 예시:
```php
$result = $x > 0 ? 'positive' : 'negative';
$message = ($x > 0) ? ($x > 10 ? 'large' : 'small') : 'zero';
```
결론
- 개인 개발자: 예외 사례 줄어듬 → 논리 집중도 향상
- 팀 협업: 코드 리뷰 갈등 감소, 일관된 규칙 공유
- 자동화 도구 호환:
PHP-CS-Fixer
등과 완전 호환 → 유지보수 효율성 향상
> 핵심 팁: if/else
블록은 이전 중괄호 끝 뒤에 새 줄 사용, fn
과 (
사이 공백 금지.