Hello World 출력
가장 기본적인 PHP 출력 예제입니다. 웹과 CLI 환경 모두에서 같은 문법으로 시작할 수 있습니다.
STATIC LEARNING LIBRARY
200개 예제를 개별 HTML 문서로 제공합니다. 검색엔진과 공유 링크에서 각 주제를 바로 열 수 있습니다.
PHP
가장 기본적인 PHP 출력 예제입니다. 웹과 CLI 환경 모두에서 같은 문법으로 시작할 수 있습니다.
echo, print, printf를 나란히 비교하며 PHP의 대표적인 출력 방식을 익히는 예제입니다.
CLI에서 넘어온 인자를 받아 간단한 스크립트를 만드는 예제입니다.
템플릿 안에서 짧은 출력 태그를 사용해 HTML에 값을 렌더링하는 예제입니다.
여러 줄 문자열을 깔끔하게 선언하는 heredoc 예제입니다.
변수 치환 없이 여러 줄 텍스트를 그대로 보관하는 nowdoc 예제입니다.
운영 환경에 따라 설정을 분기할 때 자주 쓰는 환경 변수 읽기 예제입니다.
간단한 API 응답을 JSON으로 반환하는 PHP 기본 예제입니다.
Composer 기반 프로젝트에서 대부분의 스크립트가 시작하는 진입점 형태입니다.
PHP 내장 웹 서버와 함께 가장 작은 라우터를 만드는 예제입니다.
PHP
문자열, 정수, 불리언 등 PHP의 기본 타입을 확인하는 예제입니다.
파일 단위 strict_types 선언으로 더 엄격한 타입 체크를 적용하는 예제입니다.
상수를 선언하는 두 가지 대표 방식인 const와 define을 비교하는 예제입니다.
가독성을 높이는 숫자 구분자와 기본 산술 연산을 익히는 예제입니다.
이중 따옴표 보간과 점 연산자 연결을 함께 보는 예제입니다.
멀티바이트 문자열 길이를 안전하게 재는 예제입니다.
짧은 문법으로 배열 값을 변수에 분해하는 예제입니다.
PHP의 기본 분기문 구조를 가장 단순한 형태로 확인하는 예제입니다.
PHP 8의 match 표현식으로 분기를 값으로 돌려받는 예제입니다.
for와 while을 나란히 실행하며 반복문 기본 형태를 비교하는 예제입니다.
연관 배열을 키와 값으로 순회하는 PHP의 대표 패턴입니다.
값이 없을 때 기본값으로 안전하게 대체하는 null coalescing 예제입니다.
객체가 null일 수 있을 때 안전하게 속성을 읽는 nullsafe 연산자 예제입니다.
PHP 8.1 enum을 사용해 문자열 상태를 타입 안전하게 표현하는 예제입니다.
생성 후 변경되면 안 되는 값을 readonly 프로퍼티로 고정하는 예제입니다.
PHP Attribute와 Reflection을 조합해 메타데이터를 읽는 예제입니다.
긴 인자 목록을 더 읽기 쉽게 호출하는 이름 있는 인자 예제입니다.
union 타입과 nullable 타입을 한 함수에서 함께 사용하는 예제입니다.
상태 변경이 없는 DateTimeImmutable로 날짜 계산을 안전하게 처리하는 예제입니다.
키가 없을 때만 기본값을 주입하는 null coalescing assignment 예제입니다.
PHP 참조의 기본 동작을 가장 작은 예제로 이해하는 코드입니다.
입력값을 직접 파싱하기보다 filter_var로 기본 검증을 수행하는 예제입니다.
가벼운 테스트용 객체나 어댑터를 익명 클래스로 빠르게 만드는 예제입니다.
익명 함수가 외부 스코프의 값을 use로 캡처하는 예제입니다.
정렬 비교 함수에서 자주 쓰는 우주선 연산자 사용 예제입니다.
PHP
입력 타입과 반환 타입을 함께 선언하는 가장 기본적인 함수 예제입니다.
자주 생략되는 인자에 기본값을 부여하는 함수 선언 예제입니다.
가변 길이 인자를 받아 합계를 구하는 variadic 함수 예제입니다.
참조 인자를 통해 호출자 변수 자체를 수정하는 예제입니다.
callable 타입으로 동작을 주입받는 함수형 스타일의 기본 예제입니다.
재귀 호출 구조를 가장 단순하게 익히는 팩토리얼 함수 예제입니다.
array_reduce를 함수 내부에서 감싸 더 읽기 쉬운 도메인 함수로 만드는 예제입니다.
함수가 함수를 반환하는 클로저 팩토리 예제입니다.
짧은 변환 로직을 fn 화살표 함수로 표현하는 예제입니다.
yield를 이용해 메모리를 아끼며 값을 순차 생성하는 generator 예제입니다.
다른 iterable의 값을 그대로 위임하는 yield from 예제입니다.
호출 사이에 상태를 유지하는 static 지역 변수 사용 예제입니다.
호출부 가독성을 높이는 이름 있는 인자 사용 예제입니다.
찾지 못한 경우 null을 반환하는 함수의 타입 설계를 보여주는 예제입니다.
성공 값과 실패 값을 union 타입으로 표현하는 예제입니다.
메서드를 Closure 인스턴스로 변환해 콜백 API에 넘기는 예제입니다.
PHP 8.1 first class callable 문법으로 함수를 값처럼 전달하는 예제입니다.
폴리필을 안전하게 선언하기 위해 function_exists를 감싸는 예제입니다.
배열에 담긴 값을 함수 인자로 펼치는 스프레드 호출 예제입니다.
usort에 비교 함수를 주입해 도메인 규칙으로 정렬하는 예제입니다.
값을 단계적으로 변환하는 간단한 pipe 헬퍼 함수 예제입니다.
재귀 함수에 static 캐시를 붙여 메모이제이션하는 예제입니다.
일부 인자를 미리 고정해 새 함수를 만드는 부분 적용 예제입니다.
PHP
생성자 프로퍼티 승격으로 클래스 선언을 짧게 만드는 예제입니다.
기본 상속과 메서드 오버라이드를 가장 작은 예제로 보여줍니다.
공통 규약은 두고 구현은 하위 클래스에 위임하는 추상 클래스 예제입니다.
인터페이스를 기준으로 구현체를 교체할 수 있게 만드는 기본 예제입니다.
Trait를 통해 중복 메서드를 여러 클래스에 재사용하는 예제입니다.
enum 안에 동작을 담아 값과 규칙을 함께 모델링하는 예제입니다.
값 객체 전체를 immutable하게 만들고 싶을 때 readonly class를 사용하는 예제입니다.
객체를 문자열 문맥에서 자연스럽게 표현하는 __toString 예제입니다.
의존 객체를 생성자에서 주입받는 가장 기본적인 DI 예제입니다.
유효성 규칙을 객체 생성 시점에 묶어 두는 값 객체 예제입니다.
객체 생성을 명명된 팩토리 메서드로 감추는 예제입니다.
완전한 싱글톤을 권장한다기보다 private 생성자와 지연 초기화 패턴을 이해하기 위한 예제입니다.
짧은 어댑터나 테스트 더블을 익명 클래스로 만드는 예제입니다.
상속 확장을 막아야 하는 핵심 객체에 final을 적용하는 예제입니다.
커스텀 컬렉션 객체를 foreach에 자연스럽게 연결하는 예제입니다.
객체가 JSON으로 직렬화될 모양을 스스로 제어하는 예제입니다.
객체를 배열처럼 다루고 싶을 때 ArrayAccess를 구현하는 예제입니다.
객체를 함수처럼 호출할 수 있게 만드는 __invoke 예제입니다.
동적 프로퍼티를 흉내 내는 매직 메서드 예제이며, 남용 시 가독성이 크게 떨어진다는 점도 함께 보여줍니다.
클래스에 붙인 Attribute를 라우팅이나 미들웨어 설정에 활용하는 예제입니다.
기본 빌더를 복제해 일부 조건만 다르게 조합할 때 쓰는 clone 예제입니다.
PHP
PHP 배열이 리스트 역할도 할 수 있음을 보여주는 가장 기본 예제입니다.
키와 값으로 데이터를 표현하는 연관 배열의 기본 예제입니다.
대괄호 문법과 array_push를 사용해 배열 끝에 값을 추가하는 예제입니다.
배열 각 요소를 새 값으로 변환하는 array_map 예제입니다.
조건에 맞는 요소만 남기는 array_filter 예제입니다.
배열 요소를 누적해 하나의 값으로 축약하는 array_reduce 예제입니다.
복잡한 배열 구조에서 특정 열만 빠르게 추출하는 array_column 예제입니다.
두 배열을 키와 값으로 합쳐 연관 배열을 만드는 예제입니다.
긴 목록을 일정 크기의 묶음으로 나누는 array_chunk 예제입니다.
배열 정렬 함수가 원본 배열을 직접 바꾸는 특성을 확인하는 예제입니다.
도메인 규칙에 따라 배열을 정렬하는 usort 예제입니다.
중복 값을 제거한 뒤 인덱스를 다시 정리하는 예제입니다.
키와 값을 뒤집어 역방향 조회 테이블을 만드는 예제입니다.
느슨한 비교를 피하기 위해 in_array의 strict 옵션을 켜는 예제입니다.
값이 null일 때 isset와 array_key_exists 결과가 달라지는 차이를 보여줍니다.
중첩 배열에서 필요한 값을 단계적으로 읽는 기본 예제입니다.
같은 배열 합치기라도 array_merge와 + 연산자의 우선순위가 다름을 보여줍니다.
각 행을 제자리에서 후처리하는 array_walk 예제입니다.
두 목록에서 겹치는 값과 빠지는 값을 각각 구하는 예제입니다.
기본 배열 대신 SPL 자료구조를 활용해 큐를 표현하는 예제입니다.
PHP
원본을 직접 바꾸지 않고 새 배열을 만들어 갱신하는 불변 업데이트 예제입니다.
입력만으로 출력이 결정되는 순수 함수를 만드는 예제입니다.
filter와 map을 조합해 데이터를 단계적으로 변환하는 함수형 예제입니다.
여러 함수를 하나의 파이프라인으로 조합하는 compose 예제입니다.
인자를 나눠 받아 새 함수를 돌려주는 커링 스타일 예제입니다.
null 여부에 따라 변환을 생략하는 Option 유사 헬퍼 예제입니다.
generator를 조합해 지연 평가 파이프라인을 만드는 예제입니다.
reduce를 사용해 분류별 그룹핑 결과를 만드는 예제입니다.
상태를 문장보다 표현식으로 돌려받는 함수형 스타일의 match 예제입니다.
설정값을 미리 고정해 재사용 가능한 함수를 만드는 예제입니다.
배열 기반 데이터를 DTO 컬렉션으로 변환하는 함수형 매핑 예제입니다.
예외 대신 Result 모양의 배열을 반환하는 함수형 오류 처리 예제입니다.
함수 리스트를 줄줄이 적용해 문자열을 변환하는 예제입니다.
큰 배열을 한 번에 메모리에 올리지 않고 generator로 지연 처리하는 예제입니다.
PHP
가벼운 병렬 HTTP 호출이 필요할 때 가장 먼저 떠올릴 수 있는 curl_multi 예제입니다.
PHP 8.1 Fiber로 실행 흐름을 일시 중단하고 재개하는 가장 작은 예제입니다.
Fiber가 없더라도 generator로 코루틴 스타일 흐름을 이해할 수 있는 예제입니다.
여러 스트림의 준비 상태를 동시에 기다리는 stream_select 예제입니다.
스트림을 논블로킹 모드로 전환해 비동기 루프에 연결할 수 있음을 보여주는 예제입니다.
긴 작업을 별도 프로세스로 분리할 때 쓸 수 있는 proc_open 예제입니다.
외부 라이브러리 없이도 작업 큐를 순차 스케줄링하는 기본 구조를 이해하는 예제입니다.
외부 API 재시도 시 자주 쓰는 지수 백오프 개념을 코드로 풀어낸 예제입니다.
고급 동시성 확장 사용 전 런타임 준비 상태를 먼저 점검하는 예제입니다.
같은 형태의 외부 API 요청을 배치로 실행할 때 쓰는 패턴 예제입니다.
실행 중인 작업을 외부 플래그로 중단하는 간단한 협력 취소 예제입니다.
백그라운드 워커가 큐를 하나씩 소비하는 가장 단순한 구조 예제입니다.
외부 프로세스가 끝났는지 주기적으로 확인하는 상태 폴링 예제입니다.
ReactPHP나 Amp 같은 비동기 라이브러리를 붙일 때 보게 되는 최소 진입점 형태입니다.
PHP
예외를 발생시키고 잡는 PHP의 가장 기본적인 흐름을 보여주는 예제입니다.
성공 여부와 무관하게 자원을 정리하는 finally 블록 예제입니다.
도메인 의미를 담은 예외 클래스를 직접 정의하는 예제입니다.
비슷한 처리 흐름을 여러 예외 타입에 묶는 다중 catch 예제입니다.
Exception뿐 아니라 Error까지 모두 잡고 싶을 때 Throwable을 쓰는 예제입니다.
애플리케이션 끝단에서 예외를 한 번 더 모아 처리하는 전역 핸들러 예제입니다.
전통적인 PHP warning/error를 예외 흐름으로 통합하는 예제입니다.
내장 함수가 잘못된 인자로 던지는 ValueError를 처리하는 예제입니다.
개발 단계에서 불변 조건을 빠르게 검증하는 assert 예제입니다.
PDO를 예외 모드로 두고 데이터베이스 오류를 일관되게 처리하는 예제입니다.
기술 예외를 도메인 맥락이 담긴 상위 예외로 감싸는 예제입니다.
실패 가능성이 있는 작업을 제한 횟수만큼 재시도하는 래퍼 예제입니다.
메시지와 스택 트레이스를 분리해서 남기는 기본 로깅 예제입니다.
API 서버에서 실패 응답을 일관된 JSON 포맷으로 만드는 예제입니다.
PHP
작은 파일을 한 번에 읽을 때 가장 간단한 file_get_contents 예제입니다.
짧은 텍스트 파일을 빠르게 쓰는 file_put_contents 예제입니다.
기존 파일 끝에 로그를 추가하는 FILE_APPEND 예제입니다.
fgetcsv와 fputcsv를 함께 사용해 CSV 흐름을 이해하는 예제입니다.
배열을 JSON 파일로 저장했다가 다시 읽어오는 기본 예제입니다.
현재 디렉터리의 파일 목록을 읽는 가장 간단한 예제입니다.
재귀적으로 디렉터리를 훑으며 파일을 처리하는 예제입니다.
업로드 파일 배열을 다룰 때 최소한의 검증 로직을 붙이는 예제입니다.
큰 파일을 줄 단위로 순차 처리할 때 자주 쓰는 패턴입니다.
동시에 같은 파일을 쓰는 상황에서 파일 잠금을 거는 예제입니다.
충돌을 피하는 임시 파일 경로를 안전하게 생성하는 예제입니다.
간단한 설정 파일을 parse_ini_file로 읽는 예제입니다.
패턴에 맞는 파일을 빠르게 찾는 glob 예제입니다.
파일 묶음을 배포 아카이브로 만들 때 쓰는 ZipArchive 예제입니다.
간단한 XML 문서를 읽을 때 빠르게 사용할 수 있는 SimpleXML 예제입니다.
구조를 명시적으로 다뤄야 할 때 DOMDocument를 사용하는 예제입니다.
업로드 이미지나 썸네일 처리 전에 크기 정보를 읽는 예제입니다.
간단한 HTTP 요청을 별도 라이브러리 없이 보내는 stream context 예제입니다.
운영체제별 경로 구분자 문제를 줄이기 위한 경로 헬퍼 예제입니다.
중간 상태 노출을 줄이기 위해 임시 파일 후 rename으로 교체하는 예제입니다.
PHP
모든 요청을 한 진입점으로 모으는 front controller 패턴의 핵심 아이디어 예제입니다.
저장소 접근 방식을 인터페이스 뒤로 숨기는 repository 패턴 예제입니다.
의존 객체 생성 책임을 모으는 아주 작은 서비스 컨테이너 예제입니다.
HTTP 미들웨어가 서로 감싸며 요청을 흘려보내는 구조를 보여주는 예제입니다.
알고리즘을 객체로 바꿔 런타임에 교체하는 strategy 패턴 예제입니다.
타입 문자열에 따라 적절한 구현체를 생성하는 factory 패턴 예제입니다.
복잡한 객체를 단계적으로 조립하는 builder 패턴 예제입니다.
이벤트 발행과 구독을 분리하는 observer 패턴 예제입니다.
실행할 작업을 객체로 캡슐화하는 command 패턴의 가장 작은 예제입니다.
외부 데이터 구조를 내부 DTO로 변환하는 매퍼 패턴 예제입니다.
쓰기와 읽기 요청 객체를 분리해 책임을 구분하는 CQRS 감각의 예제입니다.
기존 구현을 감싸 추가 기능을 붙이는 decorator 패턴 예제입니다.
기존 라이브러리 인터페이스를 새 애플리케이션 계약에 맞추는 adapter 예제입니다.
문자열 기반 템플릿 렌더링의 핵심 개념을 가장 작게 표현한 예제입니다.
PSR-4 오토로딩이 실제로 어떤 규칙으로 동작하는지 감을 잡는 예제입니다.
흩어진 설정 값을 하나의 명시적인 객체로 모으는 패턴 예제입니다.
작은 애플리케이션에서 match 조합으로 라우팅을 표현하는 예제입니다.
외부 시스템 의존성을 포트 인터페이스 뒤로 숨기는 헥사고날 아키텍처 감각의 예제입니다.
PHP
테스트 프레임워크 없이도 가장 작은 검증 구조를 만들 수 있음을 보여주는 예제입니다.
PHPUnit의 기본 테스트 클래스와 assertion 메서드를 보는 예제입니다.
같은 테스트 로직을 여러 입력으로 돌리는 데이터 제공자 예제입니다.
복잡한 mocking 라이브러리 없이 가벼운 스텁을 만드는 예제입니다.
특정 예외가 발생해야 성공하는 테스트를 작성하는 예제입니다.
외부 DB 없이 메모리 SQLite로 통합 테스트를 빠르게 돌리는 예제입니다.
응답 구조를 문자열 스냅샷처럼 비교하는 간단한 예제입니다.
커맨드라인 스크립트 결과를 프로세스로 실행해 검증하는 예제입니다.
프레임워크 없이도 요청 배열과 응답 배열을 분리해 핸들러를 테스트하는 예제입니다.
호출 여부를 메모리에 기록하는 테스트 더블 로거 예제입니다.
느슨한 비교가 테스트를 거짓 양성으로 만드는 상황을 보여주는 예제입니다.
고정 케이스 외에 랜덤 입력으로 기본 성질을 점검하는 가벼운 property 스타일 테스트 예제입니다.
PHP
가벼운 코드 조각을 나노초 단위로 측정하는 hrtime 예제입니다.
운영 환경에서 OPcache 활성 여부를 먼저 확인하는 성능 진단 예제입니다.
큰 목록을 배열 대신 generator로 순회해 메모리를 아끼는 예제입니다.
반복 조회되는 작은 정적 데이터를 함수 내부 캐시에 넣는 예제입니다.
배열 처리 스타일별 비용을 실제로 재보는 벤치마크 골격 예제입니다.
대용량 파일은 한 번에 메모리에 올리기보다 스트리밍 처리하는 편이 안정적임을 보여주는 예제입니다.
DB 결과를 한 번에 모두 가져오지 않고 지연 순회하는 예제입니다.
OPcache preload 파일이 어떤 구조로 생기는지 감을 잡는 예제입니다.
반복적인 문자열 연결 대신 버퍼 배열 후 implode로 합치는 예제입니다.