반응형
Web Development · PHP Function Args
PHP 함수의 매개변수 —
전역변수, 지역변수, 삼항 연산자
$myage를 함수에 넘겨 성인 여부를 판정하는 코드
시작 오늘 분석할 코드
외부에서 만든 나이 변수($myage)를 함수 check_adult에 매개변수로 넘겨 성인 여부를 판정·출력하는 코드다. 함수 정의, 매개변수, 지역변수, 삼항 연산자가 모두 한 번에 등장한다.
<?php $myage = 19; // 연령 — 전역변수 check_adult($myage); // 기능 함수 호출 — $myage가 매개변수 $age에 전달됨 function check_adult($age){ // $age = 매개변수 (지역변수) $adult_age = 20; // 비교용 기준 — 지역변수 $adult_check = ($adult_age <= $age) ? "어른" : "아이"; print $adult_check." 입니다."; } ?>
실제 출력 결과
아이 입니다.
용어 용어 정리
function사용자 정의 함수를 만드는 키워드
매개변수함수가 외부에서 받는 값을 담는 변수
인수 (argument)함수 호출 시 실제로 넘기는 값
전역변수함수 바깥에 선언된 변수
지역변수함수 안에서만 살아있는 변수
스코프변수의 유효 범위 — 어디서 쓸 수 있는가
삼항 연산자조건 ? 참값 : 거짓값 — 짧은 if-else
.문자열 결합 연산자 (PHP 고유)
1 함수 정의 vs 함수 호출
함수는 정의(만들기)와 호출(실행하기)이 분리되어 있다.
정의 (define)
function check_adult($age) { … }틀을 만들어두는 단계
만들기만 해서는 실행 안 됨
호출 (call)
check_adult($myage);실제로 실행하는 단계
괄호 안에 인수를 적어 넘김
PHP는 호이스팅(hoisting)을 일부 지원한다. 즉 호출이 정의보다 앞에 있어도 (이 코드처럼) 동작한다. 하지만 가독성을 위해 보통 정의를 먼저 적는다.
2 매개변수와 인수의 관계
function check_adult($age) { ← 매개변수 (parameter): 받을 그릇 … } check_adult($myage); ← 인수 (argument): 실제 넘기는 값 │ └→ $age = $myage 의 복사본 (= 19)
| 구분 | 정의에서 | 호출에서 |
|---|---|---|
| 이름 | 매개변수 (parameter) | 인수 (argument) |
| 역할 | 받는 변수의 그릇 | 실제 넘기는 값 |
| 이 코드 | $age |
$myage |
함수 안에서는
$myage라는 이름은 존재조차 모른다. 단지 그 값(19)이 $age라는 새 변수에 복사돼 들어왔을 뿐.3 전역변수와 지역변수의 차이
PHP의 변수 스코프(범위)는 매우 엄격하다 — 다른 언어와 달리 함수 안에서 함수 바깥의 변수에 자동으로 접근할 수 없다.
$myage = 19; ← 함수 바깥 → 전역변수 function check_adult($age) { $adult_age = 20; ← 함수 안 → 지역변수 // 여기서 $myage는 보이지 않는다! }
| 변수 | 선언 위치 | 유효 범위 | 함수 안에서 접근 |
|---|---|---|---|
$myage |
함수 바깥 | 전역 | 직접 접근 불가 (매개변수로 넘겨야 함) |
$age |
매개변수 | 함수 안 | 가능 (자기 함수 안에서) |
$adult_age |
함수 안 | 함수 안 | 가능 |
$adult_check |
함수 안 | 함수 안 | 가능 |
※ 함수가 끝나면 지역변수는 모두 사라진다.
$age, $adult_age, $adult_check는 함수 바깥에서 사용 시 undefined 경고가 뜬다.4 값으로 전달 — 복사본이 들어간다
PHP의 기본 매개변수 전달은 값 복사(pass by value)다.
$myage = 19; check_adult($myage); ← $age에는 19가 "복사"된다 function check_adult($age) { $age = 100; ← 함수 안에서 바꿔도 } ← 바깥의 $myage는 19 그대로
※ 참조로 전달하려면
- 매개변수 이름 앞에
&를 붙임:function f(&$x) - 그러면 함수 안 변경이 바깥 변수에도 그대로 반영됨
- 객체는 참조처럼 동작 — 값 복사로 적어도 같은 객체를 가리킴
반응형
5 삼항 연산자 — 짧은 if-else
$adult_check = ($adult_age <= $age) ? "어른" : "아이";
삼항 연산자 조건 ? 참값 : 거짓값은 한 줄로 분기 결과를 변수에 담을 때 쓴다. 일반 if-else와 비교하면 다음과 같다.
if-else (3줄)
if ($adult_age <= $age) {
$adult_check = "어른";
} else {
$adult_check = "아이";
}삼항 (1줄)
$adult_check = $adult_age <= $age ? "어른" : "아이";같은 동작, 더 짧음
$adult_age = 20, $age = 19 → 20 <= 19 거짓 → $adult_check = "아이"
6 점(.) — 문자열 결합 연산자
PHP는 문자열을 합칠 때 + 가 아니라 . 을 쓴다. (자바스크립트와의 큰 차이점)
print $adult_check." 입니다."; // "아이" . " 입니다." // = "아이 입니다."
| 방식 | 예 | 특징 |
|---|---|---|
| 점 결합 | $a . " " . $b |
명시적, 항상 안전 |
| 큰따옴표 보간 | "$a $b" |
짧고 읽기 쉬움 |
| 중괄호 보간 | "{$a}님" |
변수 경계 모호 시 사용 |
| + 사용 (틀림) | $a + $b |
숫자 덧셈으로 해석됨 |
※
"문자" + "다른 문자"는 PHP에서 0이 된다 (각각 숫자로 변환되어 0+0=0). 문자열 결합은 반드시 ..7 실행 흐름 단계별 추적
1
$myage = 19전역 스코프에 변수 생성, 값 19 저장
2
check_adult($myage) 호출함수 안으로 점프 → $age 매개변수에 19 복사
3
$adult_age = 20함수의 지역변수 생성
4
($adult_age <= $age)20 <= 19 → 거짓 → 삼항이 "아이"를 선택
5
$adult_check = "아이"지역변수에 결과 저장
6
print "아이"."입니다.""아이 입니다." 출력
7
함수 종료지역변수 ($age, $adult_age, $adult_check) 모두 소멸
8 자주 하는 실수
| 실수 | 증상 | 해결 |
|---|---|---|
함수 안에서 $myage 직접 사용 |
undefined 경고 → null 처리 | 매개변수로 넘기거나 global $myage; |
| 매개변수 누락 | "missing argument" 경고 | 호출 시 모든 매개변수 채우거나 기본값 지정 |
문자열 결합에 + |
0 또는 NaN 같은 결과 | PHP의 결합 연산자는 . |
| 삼항에서 괄호 누락 | 연산 우선순위 꼬임 | 조건을 괄호로 감싸기 |
| 비교 연산자 방향 헷갈림 | <와 <= 혼동 |
경계값(20)이 어느 쪽 포함인지 명확히 |
| function 키워드 오타 | 구문 오류 | function (소문자, 한 단어) |
9 함수가 좋은 이유
※ 만약 함수 없이 짠다면?
- 나이 검사 코드를 매번 복사·붙여넣기 해야 함
- 한 곳에서 버그 고쳐도 다른 곳은 그대로 → 일관성 깨짐
- 코드 의도(이게 무얼 하는 코드인가)가 잘 안 드러남
함수 한 번 정의하면 check_adult(15), check_adult(35) 같이 입력만 바꿔 무한히 재사용할 수 있다. 코드의 의도도 함수 이름만 봐도 분명해진다.
핵심 한 줄 요약
function사용자 정의 함수를 만드는 키워드
매개변수함수가 외부에서 받는 값을 담는 변수 ($age)
전역 vs 지역PHP는 함수 안에서 바깥 변수에 자동 접근 안 됨
값 복사매개변수는 기본적으로 복사본이 들어간다
삼항 연산자조건 ? 참값 : 거짓값 — 짧은 분기
.PHP의 문자열 결합 연산자 (자바스크립트와 다름)
함수의 의의동일 로직을 한 번 정의하고 무한 재사용
반응형
'php' 카테고리의 다른 글
| PHP 변수 선언 + require — data.php의 외부 참조 패턴 완전 정리 (0) | 2026.06.13 |
|---|---|
| PHP 함수 기본값 매개변수 — 로그인 분기 완전 정리 (0) | 2026.06.13 |
| PHP foreach + 중첩 if — 키별 한국어 라벨 변환 완전 정리 (1) | 2026.06.13 |
| PHP foreach — 연관 배열 key=>value 반복 완전 정리 (1) | 2026.06.13 |
| PHP continue문 — 반복 건너뛰기 완전 정리 (1) | 2026.06.12 |
왕진 블로그

댓글