PHP 치트시트 — 간결한 참고서
PHP 8.3 문법, 타입, 배열 그리고 가장 자주 쓰이는 표준 라이브러리의 치트시트 매뉴얼로, 일상적인 사례의 약 80%를 다룹니다.
PHP PHP 8.3 (LTS 계열)
Zend Engine (PHP 런타임) · 명령형 · OO · 함수형 · 동적 (선택적 정적 타입 지원)
추천 학습 경로
먼저 php hello.php와 php -S 내장 서버로 실행하는 방법을 익히고 → 변수, 타입, 제어 흐름을 익히고 → 함수, 클로저, 배열로 들어가며 → 참조 시맨틱과 객체 핸들을 이해하고 → 클래스, 인터페이스, 예외로 코드를 구성한 다음 → 필요할 때 파일 I/O, cURL, 시간과 정규 표현식을 배우고 → Fiber/pcntl로 동시성을 처리합니다. FAQ 섹션은 다시 돌아와 함정을 피할 때 유용합니다.
1.Hello World 와 실행 환경
PHP 프로그램 실행, 내장 웹 서버, 명령행 인자, 종료 코드.
최소 프로그램
PHP 파일은 <?php 로 시작하고, CLI에서는 php 파일명으로 실행한다. echo가 문자열을 출력한다.
CLI 실행
php 명령으로 스크립트를 직접 실행한다. php -l은 문법을 검사하고, php -r은 코드를 곧바로 실행한다.
내장 웹 서버
php -S는 내장 서버를 띄우고 디렉터리를 문서 루트로 삼아, 로컬 개발과 디버깅에 적합하다.
파일 구조
<?php 와 ?> 태그가 PHP와 HTML을 가른다. 순수 PHP 파일은 닫는 태그를 생략하는 것이 권장된다.
명령행 인자
$argv는 인자 배열이고, $argc는 인자 개수이며, argv[0]은 스크립트 이름이다.
종료 코드
exit() 또는 die()로 스크립트를 끝내고 상태 코드를 반환한다. 0이면 성공, 0이 아니면 오류다.
파일 포함
require는 반드시 존재하는 파일을 포함하고, include는 실패해도 경고만 낸다. _once는 중복 포함을 막는다.
환경 점검
php -i는 설정을 출력하고, php -m은 확장 모듈을 나열하며, phpinfo()는 전체 정보를 출력한다.
2.변수와 상수
변수 선언, 상수, 타입 선언, 엄격 모드, 스코프.
변수 선언
변수는 $로 시작하고 타입 선언이 필요 없다. 첫 대입에서 만들어지며, 이름은 대소문자를 구분한다.
값 복사 대입
일반 대입은 값으로 복사되며 스칼라는 독립적이다. 배열도 복사되지만 내부적으로 Copy-on-Write로 최적화된다.
상수
const는 네임스페이스 상수를 정의하고, define()은 전역 상수를 정의한다. 정의 후에는 변경할 수 없다.
매직 상수
__DIR__, __FILE__, __LINE__ 등 컴파일 시점 상수는 해당 위치에서 평가되며, 주로 로그에 쓰인다.
스코프와 static
함수 안 변수는 기본적으로 지역 변수다. global은 전역 변수를 가져오고, static은 여러 호출 사이의 값을 유지한다.
인자와 반환 타입
인자와 반환값에 타입을 선언할 수 있다. 약 모드에서는 자동 변환되며, strict_types와 함께 쓰면 엄격해진다.
엄격 모드
declare(strict_types=1)은 타입을 엄격하게 검증하며, 일치하지 않으면 곧바로 TypeError를 던진다.
명명 규약
클래스와 네임스페이스는 파스칼 케이스, 함수와 변수는 카멜 케이스, 상수는 모두 대문자로 쓰며, PSR-12를 따른다.
3.데이터 타입
스칼라, 배열, null, 열거형, 타입 시스템을 다루고, 약 변환과 타입 검사를 이해한다.
스칼라 타입
int, float, string, bool 네 가지 스칼라가 있다. 문자열은 바이트 시퀀스이며 한자는 멀티바이트로 처리된다.
배열
PHP 배열은 순서가 있는 맵이며, 정수와 문자열 키를 모두 쓰고 리스트와 사전을 동시에 담당한다.
null과 빈 값
null은 값이 없음을 뜻한다. 대입되지 않은 변수, 명시적인 null, 함수의 null 반환이 모두 null이다.
callable과 iterable
callable은 호출 가능을 뜻하고, iterable은 순회 가능한 배열 또는 Traversable 객체를 뜻한다.
mixed와 void
mixed는 임의 타입, void는 반환값 없음, never는 절대 반환하지 않음을 뜻한다.
열거형 enum
enum(8.1+)은 명명된 상수 집합을 정의한다. 순수 열거형과 값이 있는 열거형이 있으며, 메서드를 추가할 수 있다.
유니온과 인터섹션 타입
int|float은 둘 중 하나를 뜻하고, 인터섹션 타입은 여러 인터페이스 제약을 동시에 만족해야 함을 요구한다.
약 타입 변환
약 모드에서는 연산 시 타입이 자동으로 변환되며, 문자열과 숫자의 비교 규칙은 특수하니 FAQ를 참고하라.
타입 검사 함수
is_int, is_string 같은 is_* 계열은 타입을 판별하고 불리언을 반환한다.
4.참조와 메모리 의미
PHP에는 날 포인터가 없다: 변수 참조, Copy-on-Write, 객체 핸들, null 처리.
참조란 무엇인가
PHP 참조는 변수의 별칭으로, 두 이름이 같은 내용을 가리키므로 한쪽을 바꾸면 다른 쪽도 함께 바뀐다.
Copy-on-Write
배열과 객체 대입 시 처음에는 데이터를 공유하고, 실제로 쓸 때 비로소 복사되어 메모리를 절약한다.
참조 대입
unset은 현재 이름의 참조만 해제하며, 다른 별칭이 가리키는 내용에는 영향을 주지 않는다.
참조 인자
인자 앞에 &를 붙이면 참조로 전달되며, 함수 안 수정이 호출 측 변수에 반영된다.
객체 핸들
객체 변수는 핸들을 저장하므로, 대입과 인자 전달 모두 같은 인스턴스를 가리킨다. 복사본이 필요하면 clone을 쓴다.
null 처리
isset은 존재하면서 null 아님을 판별하고, is_null은 null 여부를, empty는 비어 있는지 판별한다.
Null 병합 ??
?? 는 왼쪽이 없거나 null일 때 오른쪽을 반환하며, 체이닝과 throw와 함께 쓸 수 있다.
가변 변수
$$var는 변수 값을 다른 변수의 이름으로 쓰며, 가독성이 나쁘므로 배열 사용을 권한다.
unset과 메모리
unset은 이름을 해제하고 참조 카운트를 줄이며, 0이 되면 메모리가 회수 가능하다. 순환 참조는 GC가 처리한다.
5.제어 흐름
조건, 반복, switch, match 그리고 break/continue.
if / else
if는 조건을 판별해 분기를 실행하고, elseif가 차례로 시도하며, else가 기본값으로 작동한다.
삼항 연산자
조건 ? 참 값 : 거짓 값 은 표현식이라 대입이 가능하지만, 중첩은 가독성을 해친다.
switch 문
switch는 기본적으로 느슨한 비교를 하며, 매칭 후 break를 쓰지 않으면 fall-through 된다. default가 기본값이다.
match 표현식
match(8.0+)는 엄격 비교하며 값을 반환한다. 분기는 자동으로 반환값이 되고, break가 필요 없다.
for 반복문
for(초기식; 조건식; 증감식)는 고전적인 카운터 반복으로, 증감식을 자유롭게 제어할 수 있다.
foreach 순회
foreach는 배열과 객체를 순회하며 키와 값을 동시에 꺼낼 수 있다. 참조로 수정할 때는 남은 참조에 주의해야 한다.
while와 do-while
while는 먼저 조건을 판단한 후 실행하므로 0회 실행될 수 있으며, do-while는 최소 한 번은 실행됩니다.
break와 continue
break는 반복문이나 switch를 빠져나가고, continue는 다음 반복으로 이동하며, 숫자를 지정해 여러 겹을 한 번에 빠져나갈 수도 있습니다.
6.함수와 클로저
함수 정의, 기본 매개변수, 가변 매개변수, 명명된 매개변수, 클로저, 제너레이터를 다룹니다.
함수 정의
function 키워드로 함수를 정의하며, 매개변수에 타입을 지정하고 return으로 값을 반환합니다. 함수명은 대소문자를 구분하지 않습니다.
기본 매개변수
매개변수에 기본값을 지정할 수 있어 호출 시 생략할 수 있습니다. 기본값은 반드시 상수 표현식이어야 합니다.
가변 매개변수
...$args는 나머지 모든 매개변수를 배열로 수집하며, 매개변수 목록의 마지막에 위치해야 합니다.
명명된 매개변수
호출 시 매개변수명: 값 형태로 전달하며(8.0+), 선택적 매개변수를 건너뛰고 순서에 구애받지 않습니다.
반환 타입
반환 타입은 콜론 뒤에 선언하며, void, ?T, 유니온 타입, 배열을 지원합니다.
클로저
익명 함수는 function()으로 정의하며, use로 외부 변수를 캡처합니다. 변수에 대입하거나 콜백으로 사용할 수 있습니다.
화살표 함수
fn() => 표현식은 외부 변수를 자동으로 값으로 캡처하며, 단일 표현식으로 간결하게 작성해 콜백에서 자주 사용됩니다.
호출 가능 객체
8.1+에서는 strlen(...)로 first-class callable을 생성해 함수를 일급 값으로 다룰 수 있습니다.
제너레이터
yield로 값을 한 개씩 생성하는 함수를 제너레이터라 하며, 지연 평가로 대용량 데이터를 다룰 때 메모리를 절약합니다.
7.문자열
문자열 리터럴, 보간, 연결, 멀티바이트 처리와 자주 쓰는 함수를 다룹니다.
문자열 리터럴
작은따옴표는 그대로 출력하고, 큰따옴표는 이스케이프와 변수를 해석합니다. 두 가지 스타일을 모두 흔히 사용합니다.
변수 보간
큰따옴표 안에서 $var를 그대로 보간하며, 복잡한 표현식은 중괄호 {$arr['k']}를 사용합니다.
문자열 연결
. 으로 두 문자열을 연결하고, .= 으로 덧붙입니다. 여러 번 연결할 때는 implode나 sprintf를 쓰면 더 읽기 쉽습니다.
멀티바이트 함수
CJK 등 멀티바이트 문자는 mb_ 접두 함수가 문자 단위로 계산하며, strlen은 바이트 단위로 계산합니다.
서식 지정 sprintf
sprintf/printf는 %s, %d 같은 자리표시자로 서식을 지정하며, 연결보다 읽기 쉽습니다.
찾기와 바꾸기
strpos는 위치를 찾고, str_contains는 포함 여부를 판단하며, str_replace로 일괄 치환합니다.
분할과 결합
explode는 구분자로 문자열을 배열로 분할하고, implode는 배열을 다시 문자열로 결합합니다.
대소문자와 공백 제거
strtolower/strtoupper는 대소문자를 변환하고, trim은 양쪽 공백을 제거하며, ltrim/rtrim은 한쪽만 제거합니다.
8.배열과 컬렉션
배열 생성, 추가·삭제·수정·조회, 순회, 정렬과 Spl 자료구조를 다룹니다.
배열 생성
[] 또는 array()로 배열을 생성합니다. 배열 리터럴은 자동으로 0부터 증가하는 정수 키를 할당합니다.
접근과 수정
인덱스로 요소에 접근하고, []로 추가하며, unset으로 삭제합니다. 존재하지 않는 키를 읽으면 경고가 발생합니다.
추가·삭제와 개수
array_push/array_pop은 스택의 끝을 다루고, array_shift/unshift는 큐의 앞을 다루며, count로 개수를 셉니다.
배열 순회
foreach는 값 또는 키·값 쌍을 순회하며, 리스트 해체로 2차원 배열을 순회할 수도 있습니다.
매핑과 필터링
array_map은 요소를 하나씩 변환하고, array_filter는 콜백으로 걸러내며, array_reduce는 값을 하나로 축약합니다.
정렬
sort는 값을 정렬하고, ksort는 키를 기준으로 하며, asort는 값을 기준으로 키 연관을 유지하고, usort는 사용자 정의 비교 함수를 사용합니다.
병합과 슬라이스
array_merge는 배열을 병합하고, array_slice는 부분 배열을 추출하며, array_combine은 키와 값으로 합칩니다.
해체 할당
리스트 [] 또는 키·값 [] 해체로 배열 요소를 여러 변수에 할당하며, foreach 안에서도 사용할 수 있습니다.
Spl 자료구조
SplStack, SplQueue, SplFixedArray는 고정된 기능을 갖춘 자료구조를 제공합니다.
9.메모리와 성능
참조 카운팅, 순환 참조 GC, WeakReference, 메모리 측정을 다룹니다.
참조 카운팅
zval이 참조 수를 기록하고 0이 되면 즉시 해제합니다. 대입과 매개변수 전달 모두 카운트를 증가시킵니다.
순환 참조 GC
객체가 서로 참조하면 참조 카운트가 0이 되지 않으므로 순환 가비지 컬렉터가 주기적으로 정리합니다.
WeakReference 약한 참조
WeakReference(8.0+)는 객체를 보유하지만 가비지 컬렉션을 막지 않으며, 캐시 같은 상황에 적합합니다.
메모리 측정
memory_get_usage는 현재 사용량을, memory_get_peak_usage는 최대 사용량을 확인합니다.
적시 해제
큰 변수를 사용한 뒤 unset으로 참조 카운트를 0으로 만들어 피크를 낮추면 배치 처리가 더 안정적입니다.
OPcache 캐시
OPcache는 컴파일된 바이트코드를 캐시해 매 요청마다 다시 컴파일하지 않도록 하며, 운영 환경에서는 반드시 켜야 합니다.
대용량 데이터 처리
매우 큰 배열은 메모리를 많이 차지하므로 제너레이터, 스트림 읽기, SplFixedArray로 사용량을 제어합니다.
성능 요점
문자열 연결 반복을 피하고, 미리 할당하며, 연결을 재사용하고, 불필요한 쿼리를 줄입니다.
10.객체 지향
클래스, 생성자, 가시성, 상속, 인터페이스, trait, 읽기 전용 속성을 다룹니다.
클래스 정의
class로 클래스를 정의하고, 속성에 타입을 지정하며, 메서드는 클래스 안에서 선언합니다. new로 인스턴스를 생성합니다.
생성자와 속성 승격
__construct 생성자로 객체를 초기화합니다. 8.0+에서는 생성자 매개변수를 바로 속성으로 승격할 수 있습니다.
가시성
public은 공개, protected는 자식 클래스에서 접근 가능, private은 해당 클래스만 접근하며 기본값은 public입니다.
상속
extends로 부모 클래스를 상속하고 메서드를 재정의하며, parent::로 부모 클래스의 메서드를 호출합니다.
인터페이스
interface는 메서드 시그니처를 정의하고 implements로 구현합니다. 클래스는 여러 인터페이스를 구현할 수 있습니다.
추상 클래스
abstract class는 인스턴스화할 수 없으며, 추상 메서드는 서브클래스에서 구현합니다.
trait 재사용
trait은 여러 클래스에 메서드를 횡적으로 재사용하며, use로 가져오고 여러 trait을 조합할 수 있습니다.
정적 멤버
static 속성과 메서드는 인스턴스가 아닌 클래스에 속하며, self:: 또는 클래스명::으로 접근합니다.
읽기 전용 속성
readonly 속성(8.1+)은 선언과 생성자에서 한 번만 값을 할당할 수 있으며, 이후에는 읽기 전용입니다.
11.오류 처리
예외 계층, try/catch/finally, 사용자 정의 예외 및 오류 처리를 다룹니다.
try / catch
try 블록에서 던진 예외를 catch가 잡으며, 잡은 후 프로그램은 계속 실행됩니다.
Throwable 계층
Throwable이 기본 클래스이며, Error는 엔진 오류, Exception은 프로그램 예외를 나타냅니다.
사용자 정의 예외
Exception 또는 RuntimeException을 상속해 비즈니스 예외를 정의하고 추가 필드를 담습니다.
다중 catch
여러 예외 타입을 catch할 때는 |로 구분하며, 선언된 순서대로 매칭되고 서브클래스가 부모보다 먼저 옵니다.
finally
finally는 예외 발생 여부와 관계없이 실행되며, 리소스 정리와 연결 종료에 사용됩니다.
전역 예외 핸들러
set_exception_handler로 잡히지 않은 예외를 마지막에 처리해 로그와 응답을 일관되게 처리합니다.
Error와 Exception
엔진 오류는 Error(타입/인자)이고 비즈니스 예외는 Exception이므로 분리해 잡습니다.
예외 체인
catch에서 새 예외를 던질 때 원래 예외를 세 번째 인자로 전달하며, getPrevious로 추적합니다.
12.파일 I/O
파일 읽기/쓰기, JSON, CSV, 표준 스트림을 다룹니다.
파일 읽기
file_get_contents는 파일 전체를 문자열로 읽으며, 작은 파일에 적합하고 실패 시 false를 반환합니다.
파일 쓰기
file_put_contents는 문자열을 쓰며, FILE_APPEND로 추가 모드이고 쓴 바이트 수를 반환합니다.
줄 단위 읽기
fopen + fgets로 줄 단위로 읽어 메모리 사용량이 일정하므로 대용량 파일에 적합합니다.
열기 모드
fopen의 r/w/a 모드가 읽기/쓰기 동작을 제어하며, w는 기존 내용을 비웁니다.
JSON 인코딩/디코딩
json_encode는 JSON으로 변환하고 json_decode가 파싱합니다. 두 번째 인자에 true를 주면 배열을 반환합니다.
CSV 읽기/쓰기
fgetcsv는 CSV 한 줄을 파싱하고 fputcsv는 한 줄을 쓰며, 따옴표와 이스케이프를 자동으로 처리합니다.
디렉터리와 glob
glob은 패턴으로 파일을 매칭하고 scandir은 디렉터리를 나열하며 mkdir은 디렉터리를 만듭니다.
표준 스트림
STDIN, STDOUT, STDERR 상수는 표준 입력/출력에 대응하며 CLI에서 자주 사용됩니다.
13.자주 겪는 함정
일상 개발에서 가장 자주 빠지는 함정과 올바른 작성법을 다룹니다.
==와 ===
==는 느슨한 비교로 타입을 변환하고, ===는 타입과 값을 엄격히 비교합니다. 판정에는 가능한 한 ===를 사용하세요.
foreach 참조 함정
foreach에서 &로 요소를 수정한 뒤에도 마지막 요소는 여전히 원래 배열을 가리키므로, $item을 재사용하면 데이터가 오염됩니다.
isset과 키 존재
isset은 값이 null인 키를 존재하지 않는 것으로 간주하므로, 키의 실제 존재 여부는 array_key_exists로 확인하세요.
느슨한 비교의 함정
느슨한 비교에서는 문자열과 숫자의 비교 규칙이 특수해서 '0'과 false가 같으므로 명시적 변환이 필요합니다.
정의되지 않은 키 경고
존재하지 않는 배열 키에 접근하면(8.0+) 경고가 발생하므로 ?? 또는 isset으로 미리 확인하세요.
출력 후 응답 헤더 전송
이미 내용을 출력한 뒤 header()를 호출하면 실패하므로, 먼저 버퍼링을 켜거나 응답 헤더를 먼저 보내야 합니다.
empty와 isset
empty는 0, '', '0' 등에 대해 모두 true를 반환하고 isset은 null 여부만 보므로, 의미에 맞게 선택해야 합니다.
SQL 인젝션 방지
SQL 문자열을 그대로 이어 붙이면 인젝션 위험이 있으므로 PDO의 prepared statement로 파라미터를 바인딩하세요.
14.동시성과 코루틴
PHP의 동시성 모델: 멀티프로세스, 코루틴, Fiber, 그리고 서드파티 확장을 다룹니다.
프로세스 모델
PHP는 기본적으로 단일 스레드이며 요청마다 독립 프로세스로 실행되고 변수는 요청 종료 시 해제됩니다.
pcntl_fork 멀티프로세스
pcntl_fork는 자식 프로세스를 분기하며, 부모와 자식이 각각 실행되고 CLI에서만 사용 가능합니다.
시그널 처리
pcntl_signal은 시그널 핸들러를 등록하고, dispatch는 대기 중인 시그널을 디스패치합니다.
parallel 확장
parallel은 PECL 확장으로 진정한 멀티스레드 worker를 제공하며 내장되어 있지 않습니다.
Swoole 코루틴
Swoole은 고성능 네트워크 프레임워크로, 코루틴 스케줄링과 상주 메모리로 고부하 동시 연결에 적합합니다.
Fiber 코루틴
Fiber(8.1+)는 네이티브 코루틴으로 suspend로 일시 중단, resume으로 재개하며 수동으로 스케줄링합니다.
비동기 라이브러리
내장 async/await는 없으므로 ReactPHP, Amp 같은 이벤트 루프 라이브러리로 비동기를 구현합니다.
프로세스 간 통신
멀티프로세스 간 데이터 공유는 메시지 큐, 파일 또는 공유 메모리로 처리하며, 같은 파일을 직접 수정하는 방식은 피하세요.
15.네트워크
HTTP 클라이언트, curl, URL 파싱, 세션, 소켓을 다룹니다.
HTTP 요청
file_get_contents로 간단한 요청을 보내고 stream_context_create로 타임아웃과 헤더를 설정합니다.
curl 확장
curl_init + curl_exec로 요청을 완전히 제어하고 상태 코드와 오류 정보를 읽습니다.
POST와 Guzzle
stream_context로 POST JSON을 보낼 수 있지만, 실무에서는 Guzzle 클라이언트를 우선 사용합니다.
요청과 응답 헤더
header()는 응답 헤더를 전송하고, http_response_code는 상태 코드를 설정하며, 출력 전에 호출해야 합니다.
URL 파싱
parse_url은 URL의 각 구성 요소를 분해하고, parse_str은 쿼리 문자열을 파싱하며, http_build_query는 문자열을 결합합니다.
쿠키와 세션
session_start는 세션을 시작하고, setcookie는 쿠키를 쓰며, $_COOKIE로 읽습니다.
소켓
stream_socket_client는 원격에 연결하고, fwrite는 전송하며, fgets는 읽습니다.
SSE와 WebSocket
SSE는 단방향 텍스트 푸시이고, WebSocket은 양방향 통신이므로 필요에 따라 선택합니다.
16.날짜와 시간
타임스탬프, 서식 지정, 파싱, 시간대 및 시간 연산.
현재 시간 가져오기
time()은 초 단위 타임스탬프를 반환하고, microtime은 밀리초 단위를 반환하며, date는 서식을 지정합니다.
날짜 서식 지정
date()는 서식 문자를 사용해 타임스탬프를 렌더링하며, 연월일시분초와 로컬라이즈된 표기를 지원합니다.
날짜 파싱
strtotime은 날짜 텍스트와 상대 시간을 파싱하며, 실패 시 false를 반환합니다.
타임스탬프
Unix 타임스탬프는 UTC 초 단위 값이며, DateTime은 타임스탬프와 객체 간 상호 변환을 제공합니다.
시간대
date_default_timezone_set은 기본 시간대를 설정하고, DateTime은 독립적인 시간대를 가질 수 있습니다.
시간 간격
DateInterval은 시간 길이를 나타내며, DateTime의 add/sub로 간격을 더하거나 뺍니다.
시간 차이 계산
DateTime의 diff는 DateInterval을 반환하며, 나이 또는 남은 일수 등을 읽을 수 있습니다.
일시 정지와 타이머
sleep은 블로킹 일시 정지이며, 이벤트 루프 타이머로 비차단 방식의 지연 작업을 스케줄링할 수 있습니다.
17.프로세스와 CLI
명령줄 인수, 입출력, 환경 변수 및 프로세스 제어.
명령행 인자
$argv 배열은 명령줄 인수를 저장하며, $argv[0]은 스크립트 이름입니다.
입력 읽기
fgets(STDIN)은 한 줄을 읽고, stream_get_contents는 전체를 읽으며, trim으로 줄바꿈을 제거합니다.
외부 명령 실행
shell_exec은 출력을 가져오고, exec은 상태 코드를 가져오며, 인수 전달 시 escapeshellarg로 인젝션을 방지합니다.
환경 변수
getenv는 환경 변수를 읽고, putenv는 설정하며, 민감한 설정은 환경 변수로 처리합니다.
프로세스 정보
getmypid는 현재 PID를 가져오고, posix_* 계열로 사용자와 부모 프로세스를 조회하며, hrtime으로 시간을 측정합니다.
프로세스 시그널
pcntl_signal은 시그널 처리를 제어하고, pcntl_wait는 자식 프로세스 종료를 기다립니다.
파이프와 터미널
stream_isatty로 인터랙티브 터미널 여부를 판단하고, stderr로 진행률을 출력하며, exit으로 종료 코드를 제어합니다.
종료 코드
exit()는 종료 코드를 전달하며, 0이 성공이고 0이 아니면 실패이며, 셸에서는 $?로 읽습니다.
18.정규 표현식
일치, 캡처, 치환, 분할 및 멀티바이트 모드.
preg_match
preg_match는 첫 번째 결과를 매칭하고, 캡처 그룹은 $m에 저장되며, 명명된 그룹은 이름으로 가져옵니다.
preg_match_all
모든 결과를 매칭하며, 기본적으로 그룹별로 정렬되고, PREG_SET_ORDER는 매치별로 정렬됩니다.
preg_replace
정규 표현식으로 치환하며, $1로 캡처 그룹을 역참조하고, preg_replace_callback은 콜백으로 처리합니다.
자주 쓰는 패턴
문자 클래스, 수량자와 탐욕적 매칭, 정규 표현식 구분 기호와 이스케이프 규칙.
캡처와 어서션
캡처 그룹, 비캡처 그룹, 명명된 그룹 그리고 전후방 어서션.
앵커와 경계
^는 행의 시작, $는 행의 끝, \b는 단어 경계이며, m 수정자로 여러 줄 매칭을 지원합니다.
정규 표현식 분할
preg_split은 정규 표현식으로 문자열을 분할하며, 구분 기호를 유지하거나 개수를 제한할 수 있습니다.
멀티바이트와 u 수정자
중국어를 처리할 때 u 수정자를 추가하고, preg_quote로 사용자 입력을 이스케이프합니다.
19.빌드와 도구 체인
Composer 의존성 관리, 오토로딩 및 CLI 빌드 흐름.
프로젝트 초기화
composer init은 composer.json을 생성하며, 의존성과 오토로딩 규칙을 선언합니다.
의존성 설치
composer install은 lock에 따라 설치하고, require로 새 의존성을 추가합니다.
의존성 가져오기
require vendor/autoload.php 후에는 use로 의존성 클래스를 사용할 수 있으며, 오토로딩이 적용됩니다.
PSR-4 오토로딩
네임스페이스와 디렉터리가 일대일로 대응되며, App\은 src/에 매핑되고 dump-autoload가 필요합니다.
Composer 스크립트
composer.json의 scripts는 명령 별칭을 정의하며, 설치 훅 콜백을 지원합니다.
버전 제약
^, ~, >= 같은 제약 문법으로 의존성 버전 범위를 제어하고, lock으로 정확한 버전을 고정합니다.
CLI 릴리스 명령
프레임워크 명령(artisan / console)은 마이그레이션, 캐시 및 예약 작업을 실행합니다.
PHP 설정
php -i / php --ini / php -m으로 런타임을 확인하고, ini_get으로 설정을 조회합니다.
이 치트시트에 대해
이 페이지는 PHP 8.3의 자급식 치트시트 매뉴얼로, 실제 프로젝트에서 언어 핵심과 가장 자주 쓰이는 표준 라이브러리 사용 사례의 약 80%를 다룹니다. 내용은 현대적 관행에 중점을 둡니다: declare(strict_types=1) 엄격 모드, enum 열거형, readonly 읽기 전용 속성, match 표현식, 명명된 인수, 화살표 함수와 first-class callable. 권위 있는 참고 자료는 공식 PHP 매뉴얼과 PHP The Right Way를 참조하세요. 19개 장은 각각 한 가지 주제에 집중합니다 — 첫 번째 프로그램부터 배열, 객체 지향과 흔한 실수까지. 각 장은 8–14개의 예제가 있는 소절로 나뉘며(각 5–20줄), 총 약 150개의 주제를 다룹니다. 코드 스니펫은 의도적으로 짧고 자기 설명적입니다. 모든 처리는 브라우저에서 완료됩니다 — 업로드 없음, 추적 없음. 이 페이지는 GuruToolkit 무료 개발자 도구 모음의 일부입니다; 코드 스니펫은 어떠한 보증 없이 자유롭게 사용할 수 있습니다.
버전 2.1.0