본문 바로가기

비개발자의 개발 일지

현장 팀장에서 수출 ERP까지 — AI와 함께 시스템을 만든 기록

시리즈 보기
php

PHP return · 변수 범위 · static · 문자열 함수 완전 정리

by 왕진 2026. 6. 11.
반응형

 

 

Web Development · PHP

PHP return · 변수 범위 · static
+ 문자열 함수 4종

return / 지역·전역 / global / static / explode · implode · nl2br · addslashes
시작 함수의 입출력과 데이터 가공

지난 폴더에서 함수를 만들었다. 이제 함수가 결과를 돌려주는 방법(return), 변수가 어디서 보이는가(범위), 호출 사이에 값이 살아있는 변수(static), 그리고 문자열을 자르고 합치고 변환하는 4가지 함수를 정리한다.


용어 핵심 키워드
return함수에서 값 돌려주기
list()배열을 여러 변수에 분해
scope변수가 보이는 범위
global함수 안에서 전역 사용 선언
$GLOBALS[]전역 변수 접근 슈퍼글로벌
static함수 호출 사이 값 유지
strlen()문자열 길이
explode()문자열 → 배열
implode()배열 → 문자열
nl2br()줄바꿈 → <br>
addslashes()따옴표 등에 \ 추가
date()날짜/시간 포맷

1 return — 함수의 결과 돌려주기
<?php $str = "abcdefghijklemnop"; $byte = 16; $flag = checkByte($str, $byte); // return값을 받음 if ($flag) { print "OK입니다."; } else { print "오류입니다.".$byte."Byte를 초과하였습니다."; } function checkByte($str, $byte) { $strlen = strlen($str); if ($strlen <= $byte) { return true; // 즉시 함수 종료 + true 반환 } return false; // 위 if를 안 통과하면 여기까지 } ?>

return함수의 결과값을 돌려주고 즉시 함수를 끝낸다. 호출한 쪽은 그 값을 변수에 받거나 if 조건으로 사용한다.


2 return으로 여러 값 돌려주기 — 배열 + list()

PHP 함수는 한 번에 하나의 값만 return 가능. 여러 값을 돌려주려면 배열로 묶어 반환하고, 받는 쪽에서 list()로 풀어낸다.

<?php list($year, $month, $day) = get_today(); // ↑ 배열을 3개의 변수로 자동 분해 print $year.'년'.$month.'월'.$day.'일'; function get_today() { $year = date('Y'); // 4자리 연도 $month = date('m'); // 2자리 월 $day = date('d'); // 2자리 일 return array($year, $month, $day); } ?>
💡 PHP 7.1+ 단축[$y, $m, $d] = get_today();처럼 대괄호로 더 깔끔하게 분해 가능.

3 변수 범위 — 함수는 별개의 세계

함수 안에서 만든 변수는 밖에서 안 보인다. 반대도 마찬가지 — 밖의 변수는 함수 안에 자동으로 들어가지 않는다. JavaScript와 다른 점이다.

<?php // 전역 $data = 5; function scope_test() { $data = 1; // ← 함수 안에서 새로 만든 다른 변수 print $data; // 1 } print $data; // 5 (전역) scope_test(); // 1 (함수 내 지역) print $data; // 5 (전역 그대로) ?>
변수가 보이는 범위 시각화
📄 전역 (스크립트 파일 전체)
$data = 5
⚙ scope_test() 함수 내부
$data = 1 — 같은 이름이지만 다른 변수

반응형
4 global — 함수 안에서 전역에 접근
<?php $data = 5; function scope_test() { global $data; // 전역의 $data를 함수 안에서 사용 선언 $data += 1; // 전역 $data가 변경됨 print $data; // 6 } print $data; // 5 scope_test(); // 6 print $data; // 6 — 함수가 전역값을 바꿈 ?>
$GLOBALS 슈퍼글로벌 — global 키워드 없이
function scope_test() { $GLOBALS['data'] += 1; // 전역 $data를 직접 접근 print $GLOBALS['data']; }
global $data;
  • 함수 시작에 선언
  • 이후 일반 변수처럼 사용
  • 가독성 좋음
$GLOBALS['data']
  • 한 번만 쓸 때 편함
  • 매번 [' ']로 접근
  • 의존성이 명확히 드러남
global을 너무 많이 쓰면 코드가 꼬인다 — 어디서 값이 바뀌는지 추적이 어려워진다. 가능하면 매개변수와 return으로 처리하는 게 권장. global은 진짜 필요할 때만.

5 static — 호출 사이에 값 살리기
일반 변수의 한계
<?php counter(); counter(); counter(); counter(); counter(); function counter() { $data = 0; // 매번 0으로 초기화 → 매번 0 출력 print $data++; print "<br>"; } // 출력: 0, 0, 0, 0, 0 ?>
static으로 살리기
function counter() { static $data = 0; // 처음 한 번만 0으로 초기화 print $data++; print "<br>"; } // 출력: 0, 1, 2, 3, 4 — 호출마다 값이 누적됨
📌 static이 붙은 변수는 함수가 끝나도 값이 살아있다. 다음 호출 때 그대로 이어 쓴다. 카운터, 캐시 등에 자주 쓰임.

6 4가지 변수 종류 비교
종류 위치 수명 접근 범위
전역변수 함수 밖 스크립트 종료까지 전역 + global 선언한 함수
지역변수 함수 안 함수 종료까지 그 함수만
매개변수 함수 정의 () 함수 종료까지 그 함수만
static 변수 함수 안 (static 선언) 스크립트 종료까지 그 함수만 (값은 유지)

7 explode · implode — 문자열 ↔ 배열
<?php // explode: 문자열 → 배열 $string = "사과,귤,감,밤"; $array = explode(',', $string); print_r($array); // Array ( [0] => 사과 [1] => 귤 [2] => 감 [3] => 밤 ) // implode: 배열 → 문자열 $data = array("사과", "귤", "감", "밤"); $result = implode(',', $data); // "사과,귤,감,밤" ?>
explode(구분자, 문자열)
  • 문자열을 자른다
  • "사과,귤" → ["사과", "귤"]
  • CSV 파싱에 자주
implode(연결자, 배열)
  • 배열을 합친다
  • ["사과","귤"] → "사과,귤"
  • CSV 만들 때, 쿼리 인자 등

8 nl2br — 줄바꿈을 <br>로
<?php $string = "PHP의 함수는 정말 편리 합니다."; $result = nl2br($string); print $result; ?>
사용 전 vs 사용 후 (HTML 결과)
nl2br 안 씀
PHP의 함수는 정말 편리 합니다. — \n이 무시됨
nl2br 씀
PHP의 함수는
정말 편리
합니다.

HTML은 소스의 줄바꿈(\n)을 무시한다. nl2br()은 그 자리에 <br>을 끼워넣어 화면에서도 줄바꿈으로 보이게 한다. 게시판, 댓글 등 사용자 입력을 그대로 보여줄 때 필수.


9 addslashes — 따옴표 이스케이프
<?php $string = '"사과","귤","감","밤"'; $result = addslashes($string); print $result; // 출력: \"사과\",\"귤\",\"감\",\"밤\" ?>

addslashes()따옴표·백슬래시·널 문자 앞에 \를 붙인다. 옛날엔 SQL 인젝션 방지 용도로 썼지만, 현대에는 prepared statement(PDO/MySQLi) 방식이 표준.

addslashes는 SQL 보안에 완벽하지 않다 — 멀티바이트 인코딩 공격 등 우회 가능. DB 작업에는 반드시 $pdo->prepare() + bindValue() 사용. addslashes는 단순 표시 목적으로만.
함수 용도 비고
addslashes() " ' \ NULL 앞에 \ 레거시
htmlspecialchars() < > & " ' → HTML 엔티티 XSS 방어 ⭐
htmlentities() 모든 가능한 문자 → 엔티티 한글 인코딩 주의
strip_tags() HTML 태그 제거 입력 정화

10 자주 하는 실수
증상 원인 해결
함수 안에서 전역 변수 접근 안 됨 PHP는 자동 클로저 X global 선언 또는 $GLOBALS[]
여러 값 return 안 됨 한 번에 하나만 배열로 묶어서 + list() 분해
counter()가 매번 0 일반 변수 (호출마다 초기화) static $data = 0; 사용
입력 줄바꿈 안 보임 HTML이 \n 무시 nl2br()로 변환 후 출력
SQL에 따옴표 들어가서 에러 이스케이프 안 함 prepared statement 사용
list()에서 변수가 비어있음 배열 인덱스가 string 배열은 0,1,2... 숫자 인덱스로

11 핵심 한 줄 요약

PHP — RETURN · SCOPE · STRING

결과 반환return 값; — 즉시 함수 종료 + 값 돌려줌
여러 값return array(...); + list($a,$b,$c) = ...
변수 범위함수 안/밖은 별개 — 자동 공유 X
전역 접근global $x; 또는 $GLOBALS['x']
호출 사이 유지static $count = 0;
문자열 → 배열explode(구분자, 문자열)
배열 → 문자열implode(연결자, 배열)
줄바꿈 표시nl2br($str) — \n을 <br>로
따옴표 이스케이프addslashes() — 보안용은 prepared statement

Tags

#PHP #return #변수범위 #지역변수 #전역변수 #global #GLOBALS #static #list #explode #implode #nl2br #addslashes #티스토리
▼ 티스토리 태그 입력란 복사용
PHP, return, 변수범위, 지역변수, 전역변수, global, GLOBALS, static, list, explode, implode, nl2br, addslashes, 티스토리
반응형

댓글