PHP 7에서 새롭게 도입된 preg_replace_callback_array() 함수는 여러 개의 정규 표현식 패턴을 각각의 콜백 함수와 연결하여 한 번에 치환 작업을 수행할 수 있는 강력한 기능입니다. 이 함수는 문자열 또는 문자열 배열을 대상으로 정규 표현식 패턴 집합과 일치하는 부분을 찾아, 각 패턴에 매핑된 콜백 함수를 통해 치환한 결과를 반환합니다.문법(Syntax)preg_replace_callback_array(patterns, input, limit, count)매개변수(Parameter) 설명patterns &mi
PHP 7에서는 스칼라 타입 선언(scalar type declaration)과 반환 타입 선언(return type declaration)을 통해 두 가지 방식의 타입 힌트(type hinting)를 제공합니다.약한 타입 힌트(Weak type hinting)엄격한 타입 힌트(Strict type hinting)약한 타입 힌트(Weak Type Hinting)기본적으로 PHP 7은 약한 타입 검사 모드로 동작합니다. 약한 타입 검사 모드에서는 타입 선언과 일치하지 않는 값이 전달되어도 오류나 치명적인 에러(fatal error)가
PHP 7 이전 버전에서는 예외(Exception)만 처리할 수 있었고, 오류(Error)는 처리할 수 없었습니다. 치명적 오류(Fatal Error)가 발생하면 애플리케이션 전체 또는 일부가 강제로 중단되는 문제가 있었습니다.이러한 문제를 해결하기 위해 PHP 7에서는 Throwable 인터페이스가 새롭게 도입되어 예외와 오류를 모두 처리할 수 있게 되었습니다.예외(Exception)와 오류(Error)의 차이예외(Exception)치명적이면서 복구 가능한 오류가 발생하면, PHP 7은 스크립트 전체 실행을 중단하는 대신 예외를
PHP에서 배열(Array)은 서로 관련된 여러 요소를 하나의 변수 아래에 저장할 수 있는 데이터 구조입니다. 개발 과정에서 배열의 내부 구조나 저장된 값을 확인해야 할 때가 많은데, 이때 PHP에서 제공하는 내장 함수를 활용하면 손쉽게 확인할 수 있습니다.PHP에서 배열의 구조와 값을 사람이 읽기 쉬운 형태로 출력하거나 프로그램의 실행 결과를 디버깅하려면 var_dump() 또는 print_r() 함수를 사용할 수 있습니다.print_r()과 var_dump()의 차이점print_r()print_r()은 변수 정보를 사람이 읽기
PHP 7 유니코드 코드포인트 이스케이프 구문이란?PHP 7은 16진수 형태의 유니코드 코드포인트를 입력받아, 큰따옴표( )로 묶인 문자열 안에서 해당하는 UTF-8 문자로 변환해 출력합니다. 16진수 자릿수는 2자리, 4자리, 6자리 그 이상 등 어떤 조합이든 가능하며, 별도의 함수를 호출하지 않고도 큰따옴표 문자열이나 heredoc 문법만으로 유니코드 문자를 손쉽게 작성할 수 있습니다. 참고로 16진수 표기에서 맨 앞의 0(선행 제로)은 생략해도 무방합니다.<html><head><title>UTF
구버전 PHP에서는 변수 표현식에 일관성 문제가 존재했습니다. 예를 들어 ${$first[name]}과 같은 구문은 개발자에게 혼란을 줄 수 있었고, 문법 자체가 일관성이 없다는 평가를 받았습니다. 이러한 비일관성 문제를 해결하기 위해 PHP 7에는 새로운 문법인 균일 변수 구문(Uniform Variable Syntax)이 도입되었습니다. 균일 변수 구문의 기본 개념 균일 변수 구문은 변수를 왼쪽에서 오른쪽 방향으로 순차적으로 평가합니다. 이 구문을 사용하려면 중괄호({})를 추가해야 합니다. echo ${$first[name
PHP에서 배열을 상수(constant)로 선언하는 방식은 버전에 따라 차이가 있습니다. 이 글에서는 PHP 5.6과 PHP 7에서 상수 배열을 선언하는 방법의 차이점과 실제 사용 예제를 살펴보겠습니다.PHP 5.6에서의 상수 배열 선언PHP 5.6에서는 const 키워드를 사용해서만 상수 배열을 초기화할 수 있었습니다. 예를 들어 다음과 같이 작성합니다.const student_rollnos = [11,12,13,14,15];위 코드는 학생 번호 목록을 담은 상수 배열 student_rollnos를 선언하는 예시입니다. 단, co
PHP 7부터는 define() 함수를 사용해 배열을 상수로 정의할 수 있습니다. 이렇게 선언한 상수 배열은 일반 배열처럼 다양한 연산자로 결합하거나 비교할 수 있으며, 대표적으로 합집합(+), 동등(==), 일치(===), 불일치(!=) 네 가지 연산 방식이 있습니다. 1. 상수 배열의 합집합 (+) 플러스(+) 연산자는 두 배열을 인덱스(키) 단위로 결합하는 합집합 연산을 수행합니다. 이때 왼쪽 배열의 키가 우선권을 가지므로, 오른쪽 배열에서는 왼쪽 배열에 없는 키의 요소만 추가됩니다. 아래 예제에서는 4개의 요소를 가진 배열
프로그래밍 언어를 처음 배우거나 프로젝트에 활용할 때 가장 많이 고민되는 두 가지 언어가 바로 PHP와 파이썬(Python)입니다. 이 글에서는 두 언어의 핵심적인 차이점을 비교하여 어떤 상황에서 어떤 언어가 더 적합한지 알아보겠습니다.파이썬(Python)의 특징파이썬은 배우기 쉽고 활용 범위가 넓은 범용 프로그래밍 언어로, 다양한 분야에서 사랑받고 있습니다.장점코딩을 처음 배우는 입문자에게 가장 적합한 언어로 꼽힙니다.문법이 간결한 일반 영어와 유사하여 이해하기 쉽고 사용하기 편리합니다.동일한 기능을 구현할 때 필요한 코드 줄 수
PHP 8에서는 숫자(numeric)를 비교할 때 숫자 비교(number comparison) 방식을 사용합니다. 반면 비교 대상이 숫자가 아니라면, 해당 값을 문자열로 변환한 후 문자열 비교(string comparison)를 수행합니다.이때 문자열은 다음과 같은 세 가지 유형으로 분류할 수 있습니다.1. 순수 숫자 문자열(Numeric String)오직 숫자로만 구성된 문자열입니다. 예: 1234 또는 1.24e12. 선행 숫자 문자열(Leading-Numeric String)숫자로 시작하지만, 그 뒤에 공백을 포함한 비숫자(n
PHP 8 리플렉션 API로 속성 읽기PHP 8에서는 속성(Attribute)을 클래스, 프로퍼티, 클래스 상수, 메서드, 함수, 매개변수 등 다양한 대상에 선언하고 접근할 수 있습니다.PHP 8의 리플렉션 API(Reflection API)는 이러한 속성을 읽을 수 있도록 모든 관련 리플렉션 객체에 getAttributes() 메서드를 제공합니다.getAttributes() 메서드는 ReflectionAttribute 인스턴스들의 배열을 반환합니다. 각 인스턴스를 통해 속성의 이름(getName()), 전달된 인자(getArgum
PHP 7까지는 위치 기반(positional) 매개변수 방식만 사용할 수 있었습니다. 즉, 첫 번째 인수는 반드시 첫 번째 매개변수에, 두 번째 인수는 두 번째 매개변수에 순서대로 할당해야 했으며, 누락된 인수가 있으면 PHP 7.x 버전에서는 해당 매개변수의 기본값이 자동으로 사용되었습니다.반면 PHP 8부터는 매개변수의 위치가 아닌 이름을 기준으로 함수에 인수를 전달하는 명명된 인수(Named Arguments) 기능이 도입되었습니다. 이 방식은 다음과 같은 장점을 제공합니다.인수 전달 순서가 더 이상 중요하지 않습니다.기본값
속성(Attribute)은 다른 클래스, 함수, 클래스 메서드, 클래스 프로퍼티, 상수, 매개변수에 메타데이터를 추가하기 위해 사용하는 일종의 클래스입니다. 속성은 런타임 중에는 아무런 동작도 수행하지 않습니다.속성은 코드 실행에 직접적인 영향을 주지 않지만, 리플렉션(Reflection) API를 통해 접근할 수 있습니다. PHP 8에서 도입된 속성 기능을 활용하면 다른 코드가 클래스의 프로퍼티나 메서드를 검사하고 분석할 수 있어, 프레임워크나 라이브러리 개발 시 매우 유용하게 활용됩니다.PHP 8 속성의 주요 특징하나의 선언에
PHP 8에서 도입된 유니온 타입(Union Type)은 하나의 값에 두 개 이상의 타입을 허용할 수 있게 해주는 강력한 기능입니다. 기존에는 단일 타입만 지정할 수 있었지만, 이제 여러 타입을 조합해 더 유연하고 명확한 코드를 작성할 수 있습니다.여러 타입을 지정할 때는 세로줄(|) 기호를 사용하여 각 타입을 연결합니다. 유니온 타입은 매개변수(parameter), 반환 타입(return type), 그리고 클래스 프로퍼티(property)에서 모두 사용할 수 있습니다.기본 문법type1|type2|……|type_n예제 1: 유니
PHP 8에서 새롭게 도입된 mixed 타입은 내장된 유니언(union) 타입 중 하나로, 사실상 PHP가 처리할 수 있는 거의 모든 값을 수용할 수 있습니다. mixed 타입은 int|float|string|bool|null|array|object|callable|resource와 동일한 의미를 가지며, 어떤 종류의 값이든 전달될 수 있다는 점에서 기존 타입 선언 방식과 차별화됩니다. mixed 타입의 특징 mixed 타입은 클래스 속성(property), 함수의 매개변수(parameter), 반환값(return value) 어디
생성자 속성 승격(Constructor Property Promotion)이란? PHP 8에 새롭게 도입된 생성자 속성 승격은 간단한 객체를 생성할 때 반복해서 작성해야 했던 상용구(boilerplate) 코드를 크게 줄여 주는 기능입니다. 이 기능을 활용하면 클래스 속성 선언, 생성자 정의, 값 대입이라는 세 가지 작업을 생성자 매개변수 목록 안에서 한 번에 처리할 수 있습니다. 즉, 별도로 속성을 선언하고 생성자에서 일일이 대입하는 대신, 생성자 매개변수에 접근 제한자만 붙이면 모든 것을 하나의 문법으로 해결할 수 있습니다.
PHP 8 매치 표현식(Match Expression)이란?매치 표현식(match expression)은 PHP 8에서 새롭게 도입된 기능입니다. 기존의 switch-case 문과 매우 유사하지만, 더욱 안전한 의미론(safe semantics)을 제공한다는 점에서 큰 차별성을 가집니다.매치 표현식의 주요 특징switch-case 문에서 사용하던 case와 break 구조가 필요 없습니다. 여러 조건을 하나로 묶는 복합 조건(joint conditions)을 지원하며, 새로운 코드 블록에 진입하는 대신 값 자체를 반환합니다.매치 표
PHP 8부터 도입된 nullsafe 연산자(?->)는 기존의 복잡한 null 검사 조건문을 대체할 수 있는 강력한 기능입니다. 이 연산자를 활용하면 메서드나 속성 호출을 체인 형태로 연결하되, 중간에 하나라도 실패하는 요소가 있으면 전체 실행이 즉시 중단되고 결과는 null로 평가됩니다.nullsafe 연산자의 동작 방식은 다음과 같습니다. 좌변(left-hand side)의 값이 null로 평가되면 전체 실행 체인이 그 시점에 멈추고 표현식 전체가 null을 반환합니다. 반대로 null이 아니라면 일반적인 연산자(->
PHP 8에는 새로운 Stringable 인터페이스가 도입되었습니다. 이 인터페이스는 더블 언더스코어(__)로 시작하는 매직 메서드인 __toString과 밀접하게 연관되어 있습니다.__toString 메서드는 객체를 문자열 형태로 표현할 수 있도록 해주는 기능을 담당합니다. 클래스 내부에 __toString 메서드를 정의해 두면, 해당 객체가 문자열로 취급되어야 하는 상황이 발생할 때마다 PHP 엔진이 자동으로 이 메서드를 호출합니다.예제 1: __toString 메서드를 활용한 Stringable 구현<?php cl
후행 쉼표(trailing comma)는 PHP 7.2 버전부터 도입된 문법으로, 배열의 마지막 요소 뒤에 쉼표를 붙일 수 있게 해줍니다. 이 문법을 활용하면 새로운 요소를 추가할 때 마지막 줄을 수정하지 않아도 되므로 코드 관리가 훨씬 편리해집니다. 또한 버전 관리 시스템(Git 등)에서 불필요한 diff가 발생하지 않아 협업 시에도 유용합니다. PHP 8.0 이전의 후행 쉼표 PHP 8 이전 버전에서는 함수나 메서드의 마지막 매개변수 뒤에 쉼표를 붙이는 것이 허용되지 않았습니다. 아래와 같은 코드는 문법 오류로 처리되었습니다.