반응형
Web Development · PHP Default Args
PHP 기본값 매개변수 —
인수를 안 넘겨도 동작하는 함수
$username = "guest" 처럼 정의 단계에서 기본값을 미리 잡아두기
시작 오늘 분석할 코드
함수를 호출할 때 인수를 하나도 넘기지 않아도 정상 동작하는 코드다. 비결은 function check_member($username = "guest", $password = "guest") — 매개변수에 기본값을 미리 적어둔 것.
<?php check_member(); // 호출 — 인수 없이 호출 function check_member($username = "guest", $password = "guest"){ // 매개변수 기본값 — 외부에서 지정 안 하면 "guest" 사용 // 외부에서 check_member("admin", "1234") 식으로 호출 시 // 그 값으로 덮어써짐 if($username == "guest" && $password == "guest"){ print "게스트님 환영합니다!"; }else{ print "회원님 환영합니다!"; } } ?>
실제 출력 결과
게스트님 환영합니다!
용어 용어 정리
기본값 매개변수정의 시 = 으로 지정한 fallback 값
$username사용자 이름을 받는 매개변수
$password암호를 받는 매개변수
"guest"기본값 — 외부 미지정 시 사용
==두 값이 같은지 비교 (느슨한 비교)
&&AND — 두 조건 모두 참일 때만 참
if-else조건에 따라 두 갈래로 분기
로그인 분기방문자/회원에 따라 인사 메시지 달리
1 왜 기본값이 필요한가?
함수를 만들 때 "대부분의 경우는 이런 값일 것"이라는 추정이 가능한 매개변수가 있다. 매번 똑같은 값을 적어 넘기는 건 비효율적이다.
예시 시나리오
· 페이지네이션 함수 — 한 페이지 크기는 보통 10건
· 정렬 함수 — 기본 방향은 보통 오름차순
· HTTP 요청 함수 — 기본 메서드는 보통 GET
· 로그인 검증 함수 — 비로그인 상태는 보통 guest
· 페이지네이션 함수 — 한 페이지 크기는 보통 10건
· 정렬 함수 — 기본 방향은 보통 오름차순
· HTTP 요청 함수 — 기본 메서드는 보통 GET
· 로그인 검증 함수 — 비로그인 상태는 보통 guest
이런 "당연한 기본값"을 함수 안에 묻어두면, 호출자는 특별한 경우만 인수를 넘기면 된다.
2 기본값 매개변수 문법
function check_member($username = "guest", $password = "guest") { // └────────────────┘ └────────────────┘ // 매개변수 = 기본값 매개변수 = 기본값
매개변수 이름 뒤에 =로 기본값을 적어주면 된다.
| 호출 방식 | $username | $password | 결과 |
|---|---|---|---|
check_member() |
"guest" (기본) | "guest" (기본) | 게스트님 환영 |
check_member("kim") |
"kim" | "guest" (기본) | 회원님 환영 |
check_member("kim", "1234") |
"kim" | "1234" | 회원님 환영 |
check_member("guest", "1234") |
"guest" | "1234" | 회원님 환영 |
호출자는 왼쪽부터 순서대로 인수를 채울 수 있다.
$password만 바꾸고 $username은 기본값으로 두려면 PHP 8.0+의 이름 있는 인수 문법이 필요하다 (8장 참고).3 기본값이 가능한 매개변수 = 마지막에 와야 한다
가장 헷갈리는 규칙. 기본값이 있는 매개변수는 기본값 없는 것보다 뒤에 와야 한다.
올바른 순서
function f($a, $b = 10)필수 → 선택 순서
호출:
f(1) 또는 f(1, 2)잘못된 순서
function f($a = 10, $b)선택 → 필수 → 모순
호출:
f(?, 2) 어떻게 표현?※ 중간 매개변수만 생략하는 건 일반 호출 문법으로는 불가능. PHP 8.0의 이름 있는 인수(named arguments)로만 가능하다.
반응형
4 && — 두 조건이 모두 참이어야 함
if ($username == "guest" && $password == "guest") { … } // ─────── A ───────── ─────── B ────────── // // A 참 + B 참 → 전체 참 → 게스트 분기 // A 참 + B 거짓 → 전체 거짓 → 회원 분기 // A 거짓 → B 검사 안 하고 즉시 거짓 (단락 평가)
| 연산자 | 이름 | 의미 | 예 |
|---|---|---|---|
&& |
AND | 둘 다 참이어야 참 | 로그인: 아이디 AND 암호 일치 |
|| |
OR | 하나만 참이어도 참 | 관리자 OR 작성자만 수정 가능 |
! |
NOT | 참 ↔ 거짓 뒤집기 | !isset($x) = 정의 안 됨 |
※ 단락 평가 (short-circuit)
&&: 앞이 거짓이면 뒤는 검사 안 함||: 앞이 참이면 뒤는 검사 안 함- 이 특성을 이용해
$x && doSomething($x)같이 안전 호출 가능
5 분기 흐름 단계별 추적
1
check_member() 호출인수 없음 → $username = "guest", $password = "guest" (기본값)
2
$username == "guest""guest" == "guest" → 참
3
&& $password == "guest""guest" == "guest" → 참 → 전체 참
4
if 블록 진입"게스트님 환영합니다!" 출력
5
함수 종료매개변수와 지역변수 모두 소멸
6 실무에서의 의미 — 로그인 분기
이 코드는 로그인 시스템의 가장 단순한 형태다. 사용자의 입력에 따라 두 가지 시나리오를 처리한다.
시나리오 A — 비로그인 방문자
세션에 사용자 정보 없음
→ "게스트님 환영합니다!"
check_member()로 호출→ "게스트님 환영합니다!"
시나리오 B — 로그인 회원
세션의 ID/PW를 인수로
→ "회원님 환영합니다!"
check_member($id, $pw)→ "회원님 환영합니다!"
※ 실제 로그인은 이렇게 단순하지 않다. 암호는 해시(bcrypt 등)로 비교, DB에서 사용자 조회, 세션 발급, CSRF 방어, 무차별 대입 차단 등 많은 단계가 필요하다. 이 코드는 매개변수 기본값을 보여주기 위한 학습용.
7 자주 하는 실수
| 실수 | 증상 | 해결 |
|---|---|---|
| 기본값을 변수로 지정 | 구문 오류 (호출 시점에만 평가 가능) | 기본값은 상수·리터럴만 가능 |
| 기본값 없는 매개변수가 뒤에 | 호출 모호성 → 사실상 에러 | 필수 → 선택 순서로 배치 |
| == 대신 = 사용 | 비교가 아닌 대입 → 항상 참 | 비교는 == 또는 === |
and 사용 |
우선순위 차이로 의도 다른 결과 | 조건 결합은 &&를 권장 |
| 대소문자 구분 미인식 | "Guest"와 "guest" 다르게 취급 | strtolower()나 === 신중하게 |
8 알아두면 좋은 — 이름 있는 인수 (PHP 8.0+)
매개변수 순서를 무시하고 이름으로 직접 지정해 호출할 수 있다.
function check_member($username = "guest", $password = "guest") { … } // PHP 8.0+ 이름 있는 인수 check_member(password: "1234"); // $username은 기본값 "guest", $password만 "1234" check_member(username: "kim", password: "5678"); check_member(password: "5678", username: "kim"); // 순서 무관
※ 이름 있는 인수의 장점
- 가독성↑ — 호출 시점에 매개변수 이름이 바로 보임
- 중간 매개변수만 변경 가능
- 매개변수가 많은 함수의 호출에서 매우 유용
핵심 한 줄 요약
기본값 매개변수function f($x = "기본값") — 호출 시 생략 가능
호출 생략왼쪽부터 순서대로만 가능 (이름 있는 인수 없이)
배치 규칙기본값 없는 것 → 있는 것 순서
&&AND — 두 조건 모두 참일 때만 if 진입
단락 평가앞이 거짓이면 뒤는 보지 않음 (성능·안전성)
활용 예로그인 분기, 페이지네이션, HTTP 메서드 기본 등
PHP 8.0이름 있는 인수로 순서·중간 생략 자유로워짐
반응형
'php' 카테고리의 다른 글
| PHP 사용자 정의 함수 — 매개변수 없는 함수 완전 정리 (0) | 2026.06.13 |
|---|---|
| PHP 변수 선언 + require — data.php의 외부 참조 패턴 완전 정리 (0) | 2026.06.13 |
| PHP 함수 매개변수와 변수 스코프 — 전역/지역/삼항 완전 정리 (1) | 2026.06.13 |
| PHP foreach + 중첩 if — 키별 한국어 라벨 변환 완전 정리 (1) | 2026.06.13 |
| PHP foreach — 연관 배열 key=>value 반복 완전 정리 (1) | 2026.06.13 |
왕진 블로그

댓글