반응형
Web Development · PHP return
PHP return —
함수가 결과를 호출자에게 돌려주는 방법
strlen으로 바이트 검사 + return true/false로 OK·오류 분기
시작 오늘 분석할 코드
문자열의 길이가 정해진 한도 안에 있는지 검사하는 코드다. 함수가 true 또는 false를 return으로 돌려주고, 호출자는 그 결과로 OK·오류 메시지를 분기 출력한다.
<?php $str = "abcdefghijklemnop"; $byte = 16; $flag = checkByte($str, $byte); // 함수의 반환값이 $flag에 저장됨 if($flag){ print "OK입니다."; }else{ print "오류입니다."; print $byte; print "Byte를 초과하였습니다."; } function checkByte($str, $byte){ $strlen = strlen($str); if($strlen <= $byte){ return true; } return false; } ?>
실제 출력 결과
오류입니다.16Byte를 초과하였습니다.
※ 위 결과를 보면 의외다 — "abcdefghijklemnop"는 16글자라 16Byte일 것 같지만 실제로는 17글자(l 다음에 e가 두 번 들어감 — 오타).
strlen("abcdefghijklemnop") = 17, 17 ≤ 16은 거짓이라 false 반환.용어 용어 정리
return함수 결과를 호출자에게 돌려주고 즉시 종료
strlen()문자열의 바이트 길이를 반환하는 내장 함수
true / false참·거짓을 나타내는 불리언 값
$flag검사 결과를 담는 불리언 변수
매개변수함수가 외부에서 받는 값을 담는 변수
반환값함수가 호출자에게 돌려주는 값
if(불리언)조건이 true이면 진입, false면 else로
바이트(Byte)컴퓨터가 글자를 다루는 최소 단위 (영문=1B)
1 return은 왜 필요한가?
지금까지 본 함수들은 안에서 직접 print로 출력만 했다. 하지만 종종 함수가 한 일의 결과값을 호출자에게 넘겨, 호출자가 그 값을 가지고 더 처리하는 게 필요하다.
return 없는 함수
함수 안에서 출력까지 끝
결과를 다시 쓸 수 없음
용도: 화면 출력 전용
결과를 다시 쓸 수 없음
용도: 화면 출력 전용
return 있는 함수
결과를 호출자에게 넘김
받은 쪽이 분기·계산에 활용
용도: 검증·계산·변환
받은 쪽이 분기·계산에 활용
용도: 검증·계산·변환
2 return의 두 가지 효과
return은 두 가지 일을 동시에 한다.
return true; // (1) "true"라는 값을 호출자에게 전달 // (2) 함수 실행을 즉시 종료 (그 아래 코드 실행 안 됨)
이 코드의 checkByte를 보자.
function checkByte($str, $byte) { $strlen = strlen($str); if ($strlen <= $byte) { return true; ← (1) 호출자에게 true 줌 (2) 함수 종료 } return false; ← 위에서 return 안 했으면 여기로 와서 false 반환 }
"return을 만나는 즉시 함수 끝"이라는 점이 중요하다. 그래서 if 안에
return true가 있으면 return false는 그 외의 경우에만 실행된다 → if-else 없이도 분기 효과.3 strlen() — 문자열 바이트 길이
strlen("abc") // 3 strlen("abcdefghij") // 10 strlen("abcdefghijklemnop") // 17 (16글자 같지만 17!)
| 입력 | strlen 결과 | 설명 |
|---|---|---|
| "hello" | 5 | 영문 1글자 = 1바이트 |
| "한글" | 6 (UTF-8 기준) | 한글 1글자 = 3바이트 |
| "a한" | 4 | 영문 1 + 한글 3 = 4바이트 |
| "" (빈 문자열) | 0 |
※
strlen은 "바이트 단위"로 센다. 한글 글자 수를 세려면 mb_strlen($str, "UTF-8")을 써야 한다. 글자 수와 바이트 수는 다르다.반응형
4 반환값을 변수에 받기
$flag = checkByte($str, $byte); // ↑ ↑ // 여기에 들어감 함수가 return으로 돌려준 값
호출 자리(checkByte(...)) 자체가 결과 값으로 치환된다고 생각하면 쉽다.
// 호출 시점에 함수가 false를 return 했다면 $flag = checkByte($str, $byte); ↓ 평가됨 $flag = false;
반환값을 변수에 안 받고 바로 if 조건에 쓸 수도 있다 →
if (checkByte($str, $byte)) { ... }. 단, 결과를 두 번 이상 쓸 거면 변수에 담아두는 게 효율적이다.5 if($flag) — 불리언 직접 검사
$flag가 이미 true·false이므로 비교 연산이 필요 없다.
간결 (이 코드)
if ($flag) { ... }$flag가 true면 진입
가장 자연스러움
불필요한 비교
if ($flag == true) { ... }같은 결과지만 장황
초보자가 자주 하는 표현
※ PHP의 "참" 판정
- true / 0이 아닌 숫자 / 빈 문자열이 아닌 문자열 / 비어있지 않은 배열 → 참
- false / 0 / "" / "0" / null / 빈 배열 → 거짓
- 주의: 문자열
"0"은 거짓 (PHP의 함정)
6 실행 흐름 단계별 추적
1
$str = "abcdefghijklemnop"17글자 문자열 저장
2
$byte = 16한도 16바이트 설정
3
checkByte($str, $byte) 호출매개변수로 두 값을 함수 안으로 복사
4
$strlen = strlen($str) → 17문자열 바이트 길이 측정
5
17 <= 16 → 거짓if 통과하지 않음 → return true 안 함
6
return false함수 종료, false를 호출자에게 반환
7
$flag = false호출 위치에 false가 채워짐
8
if($flag) → false → else 진입"오류입니다.16Byte를 초과하였습니다." 출력
7 "guard clause" 패턴 — 일찍 return하기
이 코드의 함수는 사실 guard clause(이른 종료)를 활용한 깔끔한 형태다.
if-else로 두 줄
if (조건) {
return true;
} else {
return false;
}guard 패턴 (이 코드)
if (조건) {
return true;
}
return false;같은 동작, 더 평평함
심지어 더 간결하게는 비교 결과 자체를 그대로 return할 수 있다.
function checkByte($str, $byte) { return strlen($str) <= $byte; // 비교 결과(true/false)를 그대로 반환 }
8 자주 하는 실수
| 실수 | 증상 | 해결 |
|---|---|---|
return을 빼먹음 |
호출자에 null이 전달됨 | 모든 분기에 return 보장 |
| return 뒤에 코드 작성 | 실행 안 됨 (도달 불가능) | return은 함수의 마지막 동작 |
| strlen으로 한글 글자 수 | 실제 글자 수의 3배 결과 | 한글: mb_strlen($s, "UTF-8") |
if ($flag == true) |
장황 (틀리진 않음) | 그냥 if ($flag) |
| 화면 출력하면서도 결과를 쓰려 함 | 출력 + 분기 둘 다 안 됨 | 출력은 호출자가, 결과는 return으로 |
9 한 단계 발전 — 한국어/영문 혼용 검증
실제 사이트에서 닉네임·게시글 길이를 검사할 때는 한글도 1글자로 세야 한다.
function checkByte($str, $maxBytes) { return strlen($str) <= $maxBytes; // 바이트 기준 } function checkLen($str, $maxChars) { return mb_strlen($str, "UTF-8") <= $maxChars; // 글자 기준 }
핵심 한 줄 요약
return결과를 호출자에 돌려주고 함수 즉시 종료
두 가지 효과값 전달 + 실행 종료
$flag = 함수()반환값을 변수에 받아 두 번 이상 사용
strlen문자열 바이트 길이 (한글은 글자 수와 다름)
if($flag)불리언 직접 검사 — == true는 불필요
guard 패턴조건 만족 시 일찍 return → 코드 평평해짐
한글 검증바이트 수는 strlen, 글자 수는 mb_strlen
반응형
'php' 카테고리의 다른 글
| PHP 변수 스코프 — 지역/전역 분리 완전 정리 (0) | 2026.06.13 |
|---|---|
| PHP return + list — 배열 반환과 다중 변수 분해 완전 정리 (0) | 2026.06.13 |
| PHP 사용자 정의 함수 — 매개변수 없는 함수 완전 정리 (0) | 2026.06.13 |
| PHP 변수 선언 + require — data.php의 외부 참조 패턴 완전 정리 (0) | 2026.06.13 |
| PHP 함수 기본값 매개변수 — 로그인 분기 완전 정리 (0) | 2026.06.13 |
왕진 블로그

댓글