개요PHP의 Exception 클래스는 Throwable 인터페이스를 구현하며, ErrorException 클래스는 Exception 클래스를 상속하여 확장한 클래스입니다. ErrorException은 일반적으로 무시되기 쉬운 Notice나 Warning 같은 오류를 직접 잡아내고 처리하고 싶을 때 명시적으로 던지기(throw) 위해 사용됩니다.PHP 코어에는 다음과 같은 사전 정의된 오류 상수들이 포함되어 있습니다.값상수설명1E_ERROR치명적인 런타임 오류입니다.2E_WARNING런타임 경고(치명적이지 않은 오류)입니다.4E_P
DivisionByZeroError란 무엇인가?DivisionByZeroError 클래스는 ArithmeticError 클래스의 하위 클래스입니다. 이 오류는 나눗셈 연산에서 분모 값이 0일 때 발생하며, 다음과 같은 경우에도 나타날 수 있습니다.나머지 연산자(%)의 두 번째 피연산자가 0인 경우intdiv() 함수의 두 번째 인수가 0인 경우DivisionByZeroError 발생 예시첫 번째 예제에서는 % 연산자를 사용해 10을 0으로 나머지 연산함으로써 DivisionByZeroError를 의도적으로 발생시켜 보겠습니다.예제
개요PHP 7.3 버전부터 CompileError 예외(exception)가 새롭게 도입되었습니다. 이 클래스는 Error 클래스를 상속하며, 기존에는 치명적인 오류(fatal error)로 프로그램이 중단되던 일부 오류 상황이 이제는 CompileError 예외로 처리됩니다. 특히 token_get_all() 함수에서 발생할 가능성이 높은 컴파일 오류에 이 변경 사항이 적용됩니다.token_get_all() 함수는 Zend 어휘 분석기(lexical scanner)를 활용하여 주어진 문자열을 PHP 언어의 토큰 단위로 파싱하는 역
개요AssertionError 클래스는 Error 클래스의 하위 클래스입니다. 이 오류는 assert() 함수가 FALSE를 반환할 때 발생하며, 코드 내에서 검증 조건이 충족되지 않았음을 의미합니다.assert()는 주어진 어설션(assertion)이 참인지 거짓인지 검사하고, 거짓일 경우 AssertionError를 던집니다. assert() 함수는 다음과 같이 정의됩니다.문법(Syntax)PHP 5 및 PHP 7 assert ( mixed $assertion [, string $description ] ) : bool PHP
ArithmeticError란 무엇인가?ArithmeticError 클래스는 PHP에서 Error 클래스를 상속받는 오류 클래스입니다. 이름 그대로 수학적 연산을 수행하는 과정에서 발생할 수 있는 오류를 나타냅니다.대표적인 발생 시나리오는 다음과 같습니다.비트 시프트(bitwise shift) 연산에서 음수만큼 시프트를 시도할 때intdiv() 함수 호출 결과가 정수의 유효 범위를 벗어나는 값이 될 때이러한 상황에서 PHP는 ArithmeticError를 던지며, 적절히 처리하지 않으면 프로그램이 비정상 종료될 수 있습니다.예제 1
ArgumentCountError란 무엇인가?PHP에서 사용자가 정의한 함수나 메서드에 정의된 개수보다 적은 인수를 전달하면, PHP 파서는 ArgumentCountError 예외를 발생시킵니다. 이 오류 클래스는 PHP 7.1부터 도입되었으며, TypeError 클래스를 상속받아 구현되어 있습니다.즉, 함수 시그니처에서 요구하는 필수 매개변수가 호출 시점에 모두 제공되지 않으면 프로그램 실행이 중단되고 ArgumentCountError가 던져지므로, 이를 try-catch 블록으로 처리할 수 있습니다.예제 1: 사용자 정의 함수에
PHP ArrayAccess 인터페이스란?PHP에서 ArrayAccess 인터페이스는 클래스 내부의 배열 프로퍼티를 마치 일반 배열처럼 접근하고 조작할 수 있도록 해주는 기능을 제공합니다. 이 인터페이스를 구현하면 객체 생성 시 배열 프로퍼티를 외부에 직접 노출하지 않으면서도 $obj["키"]와 같은 배열 문법으로 값에 접근할 수 있습니다.ArrayAccess 인터페이스는 다음과 같은 추상 메서드들을 정의하고 있습니다.문법(Syntax)ArrayAccess { /* 메서드 */
개요PHP에서 익명 함수(Anonymous Function), 즉 람다(lambda) 함수를 생성하면 그 결과로 Closure 클래스의 객체가 반환됩니다. Closure 클래스 자체는 단순한 내부 클래스처럼 보이지만, 익명 함수를 더 세밀하게 제어할 수 있는 유용한 메서드들을 제공합니다.이 글에서는 Closure 클래스의 구조와 주요 메서드인 bind(), bindTo(), call() 등의 사용법을 예제와 함께 살펴보겠습니다.Closure 클래스 문법Closure { /* Methods */ &
개요대량의 데이터를 foreach와 같은 반복문으로 순회하려면 많은 메모리와 상당한 처리 시간이 필요합니다. 하지만 제너레이터(generator)를 사용하면 이러한 오버헤드 없이도 데이터 집합을 반복(iterate)할 수 있습니다.제너레이터 함수는 겉보기에 일반 함수와 매우 비슷합니다. 다만 return 문 대신 yield 키워드를 사용하여 함수가 반복적으로 실행되면서 순회할 값을 하나씩 제공한다는 점이 다릅니다.yield 키워드는 제너레이터 메커니즘의 핵심입니다. return과 사용 방식이 비슷해 보이지만, yield는 함수의 실
개요 Iterator 인터페이스는 추상 인터페이스인 Traversable을 확장(extends)한 인터페이스입니다. PHP는 일상적인 반복 작업을 손쉽게 처리할 수 있도록 다양한 내장 이터레이터, 즉 SPL 이터레이터를 제공합니다. 대표적인 예로 ArrayIterator, DirectoryIterator 등이 있습니다. 사용자가 직접 정의한 클래스에서 Iterator 인터페이스를 구현하려면, 해당 인터페이스에 선언된 추상 메서드들을 모두 구현해야 합니다. 문법 Iterator extends Traversable { &
소개IteratorAggregate 인터페이스는 추상 Traversable 인터페이스를 확장한 것으로, 클래스가 외부 이터레이터(external iterator)를 생성할 수 있도록 구현하는 인터페이스입니다. 이 인터페이스는 getIterator라는 이름의 추상 메서드 하나만을 정의하며, 이를 구현하는 클래스는 자신이 가진 데이터를 반복 가능(iterable)한 형태로 외부에 노출할 수 있습니다.문법IteratorAggregate extends Traversable { /* 메서드 */ abstract public g
서론Serializable 인터페이스는 PHP에서 사용자 정의 직렬화 로직을 제공하는 클래스를 작성할 수 있도록 지원하는 내장 인터페이스입니다. PHP의 serialize() 함수는 대부분의 값을 저장 가능한 문자열 표현으로 변환할 수 있지만, 기본적으로 사용자 정의 클래스의 객체는 직렬화할 수 없습니다. Serializable 인터페이스를 구현하면 객체의 직렬화 및 역직렬화 과정을 직접 제어할 수 있습니다.문법Serializable { /* 메서드 */ abstract public serialize ( void )
Throwable 인터페이스란?PHP 7부터 도입된 Throwable 인터페이스는 throw 문으로 던질 수 있는 모든 객체의 기반 역할을 합니다. 여기에는 Error와 Exception 클래스가 모두 포함됩니다.PHP에서 미리 정의된 에러 및 예외 클래스와 사용자가 직접 정의한 클래스는 각각 Error와 Exception 클래스를 상속받으며, 이 두 클래스 모두 Throwable 인터페이스를 구현하고 있습니다. 즉, Throwable은 PHP 예외 처리 계층 구조의 최상위 인터페이스라고 할 수 있습니다.인터페이스 선언 구조Thro
개요 Traversable은 추상 인터페이스이기 때문에 어떤 클래스에서도 직접 구현할 수 없습니다. 일반적으로 PHP에서는 Traversable을 확장하는 Iterator 또는 IteratorAggregate 인터페이스를 사용하여 해당 클래스가 foreach 문으로 순회 가능한지 확인합니다. 일부 내장 클래스는 이 인터페이스를 구현하고 있어 별도의 Iterator 인터페이스를 구현하지 않아도 foreach 문에서 바로 사용할 수 있습니다. 또한 Traversable은 추상 인터페이스이므로 그 안에 어떠한 메서드도 포함되어 있지 않
소개약한 참조(Weak Reference)를 사용하면 객체가 소멸되는 것을 막지 않으면서도 해당 객체에 대한 참조를 유지할 수 있습니다. 이러한 특성 덕분에 캐시(cache)와 같은 구조를 구현할 때 매우 유용하게 활용됩니다.약한 참조는 일반 참조와 비슷하지만, 결정적인 차이점이 있습니다. 바로 가비지 컬렉터(Garbage Collector)가 객체를 수거하는 것을 방해하지 않는다는 점입니다. 해당 객체를 가리키는 강한 참조(strong reference)가 더 이상 존재하지 않으면, 객체는 즉시 메모리에서 제거됩니다. 이러한 방식
소개 $argc는 PHP 스크립트가 명령줄(커맨드 라인)에서 실행될 때만 사용할 수 있는 슈퍼글로벌(초전역) 변수입니다. 웹 서버의 문서 루트에서 HTTP 요청을 통해 실행될 때는 사용할 수 없습니다. 이 변수는 정수형이며, 현재 실행 중인 스크립트에 전달된 명령줄 인수의 개수를 나타냅니다. 스크립트 파일명 자체도 명령줄에 함께 입력되므로, $argc의 최솟값은 항상 1입니다. 또한 php.ini 설정 파일에서 register_argc_argv 지시어가 비활성화(off)되어 있으면 이 변수는 정의되지 않으니 주의해야 합니다. $a
소개PHP 스크립트를 명령줄(CLI)에서 실행하면, $argv 슈퍼글로벌 배열에 전달된 인자들이 자동으로 담깁니다. 배열의 첫 번째 요소인 $argv[0]에는 항상 실행 중인 스크립트의 이름이 저장됩니다. 단, php.ini 설정 파일에서 register_argc_argv 지시어가 비활성화되어 있으면 이 변수를 사용할 수 없습니다.$argv 기본 사용법다음은 명령줄에서 실행하는 간단한 PHP 스크립트입니다. var_dump() 함수를 사용해 $argv 배열의 구조를 확인해 보겠습니다.예제 1: $argv 배열 확인하기<?php
PHP $_COOKIE란? 슈퍼글로벌(superglobal) 변수 $_COOKIE는 현재 실행 중인 스크립트로 HTTP 요청과 함께 전달된 쿠키 형태의 변수들을 담고 있는 연관 배열입니다. 예전에 사용되던 $HTTP_COOKIE_VARS도 동일한 정보를 포함하지만, 슈퍼글로벌이 아니며 현재는 공식적으로 폐기(deprecated)된 상태이므로 더 이상 사용해서는 안 됩니다. 쿠키(Cookie)란 무엇인가? 쿠키는 웹 서버가 사용자(클라이언트)의 컴퓨터에 저장해 두는 작은 텍스트 파일로, 주로 로그인 상태 유지, 사용자 환경설정 저장
PHP $_ENV란 무엇인가?$_ENV는 PHP의 슈퍼글로벌(superglobal) 연관 배열 중 하나로, 현재 실행 중인 스크립트에서 접근 가능한 환경 변수(environment variables)를 저장합니다. 과거에는 동일한 정보를 담는 $HTTP_ENV_VARS 변수도 존재했지만, 이는 슈퍼글로벌이 아니며 현재는 폐기(deprecated)된 상태이므로 사용하지 않는 것이 좋습니다.환경 변수는 전역 네임스페이스(global namespace)로 가져와집니다. 이 변수들의 대부분은 PHP 파서가 실행되는 셸(shell)에 의해
PHP $_FILES란 무엇인가?PHP의 전역 사전 정의 변수인 $_FILES는 HTTP POST 방식을 통해 업로드된 파일 정보를 연관 배열 형태로 담고 있는 슈퍼글로벌 변수입니다. 웹에서 파일을 업로드하려면 반드시 enctype 속성이 multipart/form-data로 설정된 POST 방식의 HTML 폼을 사용해야 합니다.참고로 과거에는 $HTTP_POST_FILES라는 변수에 동일한 정보가 담겼지만, 이 변수는 슈퍼글로벌이 아니며 현재는 공식적으로 지원이 중단(deprecated)되었으므로 사용하지 않는 것이 좋습니다.$_