IMG-LOGO
공지사항 :

PHP 공식 매뉴얼(php.net/manual)

lmkfox - 2025-08-17 06:36:03 29 Views 0 Comment

1. 어디서 보나: 문서 구조 빠르게 파악

  • Language Reference: 문법, 타입, 오류 처리, OOP, 예외, 속성(Attributes) 등 언어 자체.

  • Function Reference: 문자열, 배열, 날짜, 파일/스트림, 네트워크, 정규식, cURL, PDO 등 모듈/확장별 함수.

  • Security/Features: 세션, 쿠키, 스트림 래퍼, 필터 등 구성 요소.

  • INI 설정: php.ini 지시자별 의미·기본값·변경 가능한 범위.

  • FAQ/Appendices: 마이그레이션 가이드(버전별 변경점), 지원 프로토콜 목록, RFC 등.

팁: 함수 문서는 php.net/함수이름 으로 바로 접속할 수 있습니다. 예) php.net/strpos

좌측 상단 검색에서 함수·지시자·확장명을 바로 검색하세요. 페이지 상단에서 언어(ko/en), 버전 선택도 가능합니다.


2. 함수 문서 읽는 법: 체크리스트 8가지

예시로 strpos를 떠올리며 보겠습니다.

  1. 시그니처(Prototype)

    • 예: strpos(string $haystack, string $needle, int $offset = 0): int|false

    • 매개변수 타입, 기본값, 반환 타입(단일/유니온)을 먼저 본다.

  2. Parameters

    • 각 인자의 의미와 엣지 케이스를 읽는다.

    • 예: $offset이 음수일 때 의미, $needle이 빈 문자열일 때 동작 등.

  3. Return Values

    • int|false처럼 유니온 타입이면 분기 처리를 엄격비교로:

$pos = strpos($s, 'a');
if ($pos === false) { /* 못 찾음 */ } else { /* 0도 유효한 위치 */ }

    • “에러 시 false”인지, “예외를 던지는지” 구분한다. PHP 8부터 일부 함수는 TypeError/ValueError 예외를 던진다.

  1. Errors/Exceptions

    • 어떤 예외 클래스가 발생하는지 확인. try/catch 범위를 결정한다.

  2. Changelog

    • 버전에 따라 동작·타입이 달라졌는지 확인.

    • 팀/서버의 PHP 버전과 맞지 않으면 문서 오른쪽 상단에서 대상 버전으로 바꿔 읽는다.

  3. Notes/Warnings

    • 인코딩, 로케일, 멀티바이트 이슈, 보안 주의사항이 자주 적혀 있다.

  4. Examples

    • 문서 예제를 복사 → 최소 재현으로 실행해 동작을 확인한다.

  5. See Also

    • 대체/보완 함수 링크로 더 적절한 API가 있는지 비교한다.

    • 예: str_contains()(PHP 8+)가 의도에 더 맞을 수 있다.


3. 언어 기능(문법) 문서 읽는 법

  • 타입 시스템: 스칼라/복합/특수(null), 유니온 타입(A|B), 널 허용(?T), mixed, callable 의미를 파악.

  • 오류 처리: 경고/공지 vs 예외. PHP 8에서 많은 내장 함수가 예외를 던짐.

  • OOP: 가시성, 상속, 트레이트, 인터페이스, 추상, 속성(Attributes), enum(8.1+) 등 버전 의존 기능 확인.

  • 연산자/제어구조: Nullsafe(?->), match(8.0+) 등 최신 문법 여부 체크.

문법 페이지는 개념 → 구문 → 예제 → 주의사항 순으로 읽으면 안정적입니다.


4. 확장(Extension) 문서 읽는 법

예: PDO, cURL, mbstring, intl

  • 설치/활성화: 패키지명, php.ini/extension 지시자 확인.

  • INI 옵션: 확장별로 따로 있는 경우 많음. 기본값, 변경 가능 범위(PHP_INI_ALL / PERDIR / SYSTEM)를 본다.

  • 리소스/객체 수명: 연결 핸들/객체가 언제 해제되는지, 예외 방식을 파악.

  • 에러 처리 규칙: PDO는 PDO::ERRMODE_EXCEPTION을 권장 등.


5. 

php.ini

 지시자 문서 읽는 법

각 지시자 페이지에 다음이 나옵니다.

  • 설명/기본값/변경 가능 범위

    • PHP_INI_ALL → ini_set()로 런타임 변경 가능

    • PHP_INI_PERDIR → php.ini, httpd.conf, .htaccess에서 가능

    • PHP_INI_SYSTEM → 시스템 레벨에서만

  • 성능/보안 주의사항: 예) display_errors=Off(운영), log_errors=On, memory_limit, max_execution_time, opcache.* 등


6. 스트림/컨텍스트 문서 포인트

파일/HTTP/소켓은 스트림 기반입니다.

  • Supported Protocols and Wrappers: file://, http://, php://, zip:// 등 목록과 기능.

  • Context options and parameters: stream_context_create()로 설정하는 옵션 키가 정리되어 있습니다.

    예: HTTP 타임아웃, 헤더, 프록시, SSL 검증 등.


7. 마이그레이션 가이드 활용

버전 올릴 때는 Migration 섹션을 필독:

  • 제거/비권장 함수 목록

  • 오류가 예외로 승격된 항목

  • 반환 타입 변경, 경고→예외 전환, 기본 인코딩/로캘 변화 등

  • 대체 API 제시

이 가이드와 Changelog를 함께 보면 업그레이드 이슈를 빠르게 잡습니다.


8. 사용자 코멘트(User Contributed Notes) 읽을 때 주의

  • 훌륭한 팁도 있지만 오래된 내용이 섞여 있습니다.

  • 항상 본문 기준/버전을 먼저 확인하고, 코멘트는 보조 참고로만 사용하세요.

  • 투표가 높고 최신인 코멘트를 우선 보되, 재현 테스트로 검증합니다.


9. 실무에서 자주 부딪히는 해석 포인트

  • false vs “유효한 0”: strpos()처럼 반환이 0|false인 함수는 **===**로 구분.

  • 경고/공지 vs 예외: PHP 8+에서 많은 함수가 예외를 던집니다. 문서의 Errors/Exceptions를 반드시 확인.

  • 멀티바이트: 문자열 길이/부분 문자열은 mb_* 함수군과 내 문자열 인코딩을 문서에서 확인.

  • 시간대: 날짜 함수는 기본 타임존 설정에 영향. date.timezone 지시자 문서를 확인.

  • 보안: filter_*, password_*, hash_*, openssl_* 문서는 권장 알고리즘/설정을 최신으로 확인.


10. 문서와 함께 쓰는 CLI 확인 명령

문서로 개념을 잡고, CLI로 현재 환경을 검증합니다.

php -v                 # PHP/Xdebug 버전
php --ini              # 사용 중인 ini 파일들
php -m                 # 로드된 확장 목록
php --ri xdebug        # 특정 확장 설정 보기(ri = ext info)
php -i | less          # phpinfo() 전체

PHP 8+는 리플렉션 기반 단축 명령도 유용합니다.

php --rf strpos        # 함수 시그니처/설명 요약
php --re pdo           # 확장 요약


11. 예시: 문서로부터 안전한 코드로 옮기는 흐름

문서 발췌(가정): preg_match(string $pattern, string $subject): int|false

  • 반환: 일치 1, 불일치 0, 오류 false

    코드:

$r = preg_match('/\d+/', $s);
if ($r === false) {
    // 오류 처리 (패턴 에러 등)
} elseif ($r === 1) {
    // 매치됨
} else {
    // 매치 안 됨 (0)
}

문서의 반환 규약을 엄격비교로 정확히 반영하는 것이 핵심입니다.


12. 빠른 체크리스트(북마크용)

  • 페이지 상단 버전을 내 런타임과 일치시켰는가

  • 시그니처/반환 타입을 보고 === 필요 여부를 판단했는가

  • Errors/Exceptions에 명시된 예외를 처리했는가

  • Changelog에서 내 버전에 영향 있는 변경이 있는가

  • 관련 INI 지시자/기본값/변경 가능 범위를 확인했는가

  • 예제를 최소 재현으로 직접 실행해 봤는가


댓글