PHP

PHP

    ›PHP 기초 문법

    시작하기

    • eBook 다운로드
    • PHP란 무엇인가요?
    • PHP 시작하기

    개발 환경 설정

    • 코드 에디터 준비하기
    • 윈도우(Windows) 환경에 APM 설치하기
    • macOS 환경에 APM 설치하기
    • 리눅스(Linux) 환경에 APM 설치하기
    • APM 환경 테스트 및 첫 코드 실행

    PHP 기초 문법

    • PHP는 어떻게 동작할까?
    • 기초 문법 - 태그, 마침표, 그리고 주석
    • 변수와 데이터 타입 - 프로그래밍의 기본기
    • 배열과 객체, 그리고 NULL
    • 변수와 함수의 이름 짓기 - 식별자(Identifier)
    • 절대 변하지 않는 값 - 상수(Constants)와 열거형(Enum)
    • 데이터를 요리하는 도구 - 연산자(Operators)
    • 연산자 우선순위 - 괄호의 마법
    • 흐름을 제어하는 마법 - 조건문 (if, match)
    • 흐름을 제어하는 마법 - 반복문
    • 재사용의 미학 - 함수(Function)
    • 변수의 생존 범위(Scope)와 수명
    • 흐름을 제어하는 마법 - 파일 포함과 예외 처리
    • 실무에서 숨 쉬듯 쓰이는 문자열과 배열 함수
    • 문자열을 다루는 마법의 주문 - 정규표현식(Regex)
    • 에러를 두려워하지 마라 - 디버깅과 에러 처리

    웹 개발 기초

    • 절대 믿지 마라! - 미리 정의된 변수와 외부 입력 처리
    • 사용자와 소통하는 창구 - HTML 폼(Form) 다루기
    • 나를 기억해 줘! - 쿠키(Cookie)와 세션(Session)
    • 서버의 기록 보관소 - 파일 입출력(File I/O)

    데이터베이스

    • 데이터베이스(DB)와 SQL 기초 - 데이터의 든든한 금고
    • 데이터베이스와의 안전한 대화 - PDO 기초

    실전 프로젝트

    • 첫 번째 실전 프로젝트 - 방명록(Guestbook) 만들기
    • 실전 프로젝트 2단계 - 기본 게시판(CRUD) 만들기
    • 실전 프로젝트 3단계 - 계층형(답변형) 게시판 만들기
    • 실전 프로젝트 4단계 - 게시판 레벨업 (댓글, 보안, 성능)
    • 실전 프로젝트 5단계 - 안전한 회원가입과 로그인 시스템

    실무에서 숨 쉬듯 쓰이는 문자열과 배열 함수

    1. 왜 내장 함수를 알아야 할까요?

    PHP 엔진 안에는 이미 전 세계 천재 개발자들이 최적화해 둔 수천 개의 '내장 함수(Built-in Functions)'가 들어있습니다. 우리가 며칠을 끙끙대며 수십 줄짜리 반복문을 짜야 할 복잡한 데이터 처리도, 이미 누군가 만들어 둔 내장 함수 단 한 줄이면 0.001초 만에 끝나는 경우가 허다합니다.

    이 수많은 함수를 영어 단어장 보듯 달달 외울 필요는 전혀 없습니다. "이런 기능도 PHP에 기본으로 있었지!"라는 감만 잡아두고, 나중에 실무에서 구글링을 통해 찾아 쓸 수 있으면 충분합니다. 이번 강좌에서는 현업에서 하루에도 수십 번씩 치게 되는 핵심 함수들만 쏙쏙 뽑아 정리해 드리겠습니다.


    2. 문자열(String)을 요리하는 함수들

    ① 문자열 길이와 검색

    <?php
    $str = '안녕하세요, PHP 세계!';
    
    // 길이 재기
    strlen($str);               // 한글은 1글자를 3바이트로 쳐서 길이를 뻥튀기합니다. (결과: 24)
    mb_strlen($str);            // 한글을 정확히 1글자로 셉니다. (결과: 13)
    
    // 검색하기 (PHP 8.0 이상부터 지원되는 직관적인 함수들)
    str_contains($str, 'PHP'); // 'PHP'라는 단어가 포함되어 있는가? (결과: true)
    str_starts_with($str, '안녕'); // '안녕'으로 시작하는가? (결과: true)
    str_ends_with($str, '세계!'); // '세계!'로 끝나는가? (결과: true)
    
    // 위치 찾기 (없으면 false 반환)
    mb_strpos($str, 'PHP');     // 앞에서부터 몇 번째 글자에 'PHP'가 시작되는지 찾습니다. (결과: 7)
    

    ② 문자열 변형 (자르기, 합치기, 바꾸기)

    <?php
    // 1. 공백 청소기
    $str = '  Hello, World!  ';
    trim($str); // 양쪽 끝의 쓸데없는 띄어쓰기(공백)를 날려줍니다. 폼 데이터 받을 때 무조건 씁니다.
    
    // 2. 단어 바꾸기
    str_replace('World', 'PHP', 'Hello, World!'); // 출력: Hello, PHP!
    str_replace(['a', 'e', 'i'], '*', 'apple pie'); // 여러 글자를 한 번에 '*'로 치환
    
    // 3. 자르기 (앞에서 2번째 글자부터 3글자만 잘라내라)
    mb_substr('안녕하세요', 2, 3); // 출력: 하세요
    
    // 4. 문자열 쪼개서 배열로 만들기 (CSV 쉼표 분리 등에 자주 씁니다)
    $parts = explode(',', '사과,바나나,포도'); // 결과: ['사과', '바나나', '포도']
    
    // 5. 배열을 하나로 합치기
    implode(' / ', $parts); // 결과: '사과 / 바나나 / 포도'
    

    ③ 형식 맞추기와 보안

    <?php
    // 1. 돈(금액) 예쁘게 찍기 (세 자리마다 쉼표 찍기)
    number_format(1234567); // 출력: 1,234,567
    
    // 2. 내가 원하는 틀(Format)에 값 끼워 넣기
    sprintf('이름: %s, 나이: %d세', '홍길동', 30); // 출력: 이름: 홍길동, 나이: 30세
    
    // 3. 보안의 핵심: HTML 특수문자 무력화 (XSS 방어용)
    $name = '<script>alert("해킹")</script>';
    echo htmlspecialchars($name, ENT_QUOTES, 'UTF-8'); 
    // 출력: &lt;script&gt;alert(&quot;해킹&quot;)&lt;/script&gt;
    

    3. 배열(Array)을 주무르는 함수들

    PHP는 배열을 다루는 데 있어서 세상 어느 언어보다 강력하고 유연합니다.

    ① 기본적인 조작과 확인

    <?php
    $fruits = ['사과', '바나나', '포도'];
    
    count($fruits);              // 배열 안에 데이터가 몇 개 들어있는가? (결과: 3)
    in_array('바나나', $fruits);   // 바나나가 이 배열 안에 있는가? (결과: true)
    array_key_exists('age', ['name' => '홍길동']); // 'age'라는 이름표(키)가 존재하는가? (결과: false)
    
    // 배열의 맨 끝에 데이터 쑤셔 넣기
    array_push($fruits, '딸기', '수박'); 
    

    ② 검색과 정렬

    <?php
    $numbers = [3, 1, 4, 1, 5, 9];
    
    // 원본 배열 자체를 정렬해 버립니다. (리턴값이 아닙니다!)
    sort($numbers);  // 오름차순 (1, 1, 3, 4, 5, 9)
    rsort($numbers); // 내림차순 (9, 5, 4, 3, 1, 1)
    
    // 중복된 값을 싹 지워버립니다.
    array_unique([1, 2, 2, 3, 3, 3]); // 결과: [1, 2, 3]
    
    // 배열의 순서를 거꾸로 뒤집습니다.
    array_reverse([1, 2, 3]); // 결과: [3, 2, 1]
    

    ③ 실무 필살기: array_column

    데이터베이스에서 가져온 복잡한 2차원 배열(회원 목록 등)에서 특정 세로줄(Column)만 쫙 뽑아낼 때 쓰는 기가 막힌 함수입니다.

    <?php
    $users = [
        ['id' => 1, 'name' => '홍길동', 'age' => 30],
        ['id' => 2, 'name' => '김철수', 'age' => 25]
    ];
    
    // 회원 목록에서 'name'들만 뽑아서 새로운 1차원 배열로 만들어라!
    $names = array_column($users, 'name'); 
    // 결과: ['홍길동', '김철수']
    

    4. 고차 함수 (함수형 프로그래밍 스타일)

    배열의 모든 원소를 대상으로 반복문(foreach)을 돌리지 않고도, 일괄적으로 어떤 작업(함수)을 적용할 때 사용합니다.

    <?php
    $numbers = [1, 2, 3, 4, 5];
    
    // array_map: 배열의 모든 요소에 각각 곱하기 2를 실행해서 새 배열을 만듭니다.
    $doubled = array_map(fn($n) => $n * 2, $numbers);
    // 결과: [2, 4, 6, 8, 10]
    
    // array_filter: 주어진 조건이 참(true)인 데이터만 거름망처럼 걸러냅니다. (짝수만 추출)
    $evens = array_filter($numbers, fn($n) => $n % 2 === 0);
    // 결과: [2, 4]
    

    꿀팁: 빈 데이터 청소하기
    폼에서 넘어온 데이터 중에 빈칸이나 null 값이 섞여 있을 때, array_filter()에 아무 함수도 안 주고 그냥 돌리면, 알아서 텅 빈 쓰레기 값들을 깔끔하게 걸러내어 줍니다.

    $clean = array_filter(['홍길동', '', null, '김철수', 0]); 
    // 결과: ['홍길동', '김철수']
    

    5. 내가 직접 규칙 정하기: usort

    쇼핑몰에서 상품을 '가격순', '인기순' 등 복잡한 조건으로 정렬해야 할 때 사용합니다. 앞서 배운 우주선 연산자(<=>)와 찰떡궁합입니다.

    <?php
    $users = [
        ['name' => '홍길동', 'age' => 30],
        ['name' => '막내',   'age' => 15],
        ['name' => '김철수', 'age' => 25],
    ];
    
    // "각 배열 안의 'age' 값을 기준으로 비교해서 오름차순으로 줄을 세워라!"
    usort($users, fn($a, $b) => $a['age'] <=> $b['age']);
    
    // 결과: 막내(15) -> 김철수(25) -> 홍길동(30) 순으로 원본 배열이 재배치됩니다.
    

    마치며
    다시 한번 강조하지만, 이 수많은 함수들의 스펠링이나 괄호 안에 뭐가 들어가는지를 지금 당장 백지에 쓸 수 있을 필요는 없습니다. 프로그래머의 진짜 실력은 "아, 맞다! PHP에 배열에서 빈 값을 싹 걸러주는 함수가 있었는데?"라고 떠올린 뒤, 공식 메뉴얼(php.net)에서 검색해 찾아 쓰는 능력에 있습니다.

    Last updated on 2026-4-19 by Myeongjin Cho
    ← 흐름을 제어하는 마법 - 파일 포함과 예외 처리문자열을 다루는 마법의 주문 - 정규표현식(Regex) →
    • 1. 왜 내장 함수를 알아야 할까요?
    • 2. 문자열(String)을 요리하는 함수들
      • ① 문자열 길이와 검색
      • ② 문자열 변형 (자르기, 합치기, 바꾸기)
      • ③ 형식 맞추기와 보안
    • 3. 배열(Array)을 주무르는 함수들
      • ① 기본적인 조작과 확인
      • ② 검색과 정렬
      • ③ 실무 필살기: array_column
    • 4. 고차 함수 (함수형 프로그래밍 스타일)
    • 5. 내가 직접 규칙 정하기: usort
    커뮤니티
    PHP 공식 웹사이트한국 PHP 개발자 커뮤니티
    유용한 정보
    책 소스 코드
    Copyright © 2026 EZPHP.NET