PHP 8.2의 새로운 기능: 포괄적인 개요

게시 됨: 2023-10-17
소셜 프로필에 공유하세요.

널리 사용되는 서버 측 스크립팅 언어인 PHP는 끊임없이 변화하는 웹 개발 요구 사항을 충족하기 위해 끊임없이 발전하고 있습니다. 2022년 11월 PHP 8.2가 출시되면 다양한 흥미로운 기능, 중요한 지원 중단, 중요한 버그 수정이 포함됩니다. 이 기사에서는 PHP 8.2의 새로운 기능 중 주목할 만한 측면을 자세히 살펴보고 개발자가 이 최신 릴리스에서 무엇을 기대할 수 있는지 조명할 것입니다.

목차

새로운 기능

1. 열거형: 유형 안전성 소개

아마도 가장 기대되는 PHP 추가 기능 중 하나인 버전 8.2에서는 마침내 열거형(enums)에 대한 기본 지원이 도입되었습니다. 열거형을 사용하면 개발자는 명시적 유형으로 명명된 값 세트를 정의하여 PHP에 유형 안전성의 중요한 계층을 추가할 수 있습니다.

열거형의 작동 방식에 대한 간단한 예는 다음과 같습니다.

 enum Color { case RED; case GREEN; case BLUE; }

열거형은 연관된 값을 가질 수도 있으므로 다양한 사용 사례에 다용도로 사용할 수 있습니다. 이 기능은 코드를 읽기 쉽고, 유지 관리하기 쉽게 유지하고, 상수나 매직 넘버의 오용으로 인해 발생하는 버그가 덜 발생하도록 하는 데 특히 유용합니다.

2. 생성자 승격: 상용구 코드 줄이기

PHP 8.2에는 클래스 정의를 단순화하고 상용구 코드를 줄이는 것을 목표로 하는 기능인 생성자 승격이 도입되었습니다. 생성자 승격을 사용하면 생성자의 매개변수 목록에서 직접 클래스 속성을 선언하고 초기화할 수 있습니다. 이렇게 하면 별도의 속성 선언이 필요하지 않으므로 코드가 더욱 간결해지고 유지 관리가 쉬워집니다.

 class User { public function __construct( public string $name, public string $email, public ?string $bio = null ) {} }

생성자 승격은 코드베이스의 혼란을 줄여주기 때문에 속성이 많은 클래스를 처리할 때 특히 유용합니다.

3. 읽기 전용 클래스

PHP 8.2에서는 읽기 전용 클래스를 통해 개발자가 일반적으로 객체 생성 중에 한 번만 설정할 수 있는 속성을 사용하여 클래스를 정의할 수 있습니다. 이렇게 하면 객체의 수명 동안 속성이 일정하게 유지됩니다. 읽기 전용 속성은 readonly 수정자를 사용하여 선언되며 클래스 생성자에서 초기화되어야 합니다.

PHP 8.2에서는 프로세스가 완전히 단순화되었습니다.

 class ReadOnlyClass $publicpassword , #[\SensitiveParameter] $secretpassword ) { throw new \Exception('Error'); } passwords('publicpassword', 'secretpassword');

4. "include" 및 "require" 문에 명명된 인수

PHP 8.2에서는 이제 파일을 포함하거나 요구할 때 명명된 인수를 사용할 수 있습니다. 이 기능은 특히 여러 인수를 허용하는 함수를 처리할 때 코드 가독성을 향상시킵니다.

 include filename: 'my_file.php', once: true;

이러한 인수에 이름을 제공하면 코드를 더욱 쉽게 설명할 수 있고 잘못된 인수 순서로 인해 오류가 발생할 가능성이 줄어듭니다.

5. 암시적 괄호에 대한 지원 중단 알림

코드 일관성과 가독성을 높이기 위해 PHP 8.2에는 괄호 없이 호출되는 함수와 메서드에 대한 지원 중단 알림이 도입되었습니다. 아직 오류는 아니지만 이는 개발자에게 함수를 호출할 때 괄호를 일관되게 사용하는 권장 방식을 수용하라는 경고 역할을 합니다.

 // Deprecated usage myFunction; // Recommended usage myFunction();

암시적 괄호를 사용하지 않음으로써 PHP는 코드 명확성과 유지 관리성을 향상시키는 것을 목표로 합니다.

6. 민감한 매개변수 값 숨기기 지원

PHP는 특정 프로그램 상태에서 호출 스택을 모니터링하는 기능을 제공하며, 이는 애플리케이션 문제를 해결할 때 특히 유용합니다. 그러나 어떤 경우에는 스택 추적에 숨겨야 할 기밀 세부 정보가 포함될 수 있습니다.

PHP 8.2에서는 "SensitiveParameter"라는 새로운 속성이 도입됩니다. 이 속성은 애플리케이션에 오류가 발생할 때 민감한 데이터가 표시되거나 기록되지 않도록 난독화하는 역할을 합니다. 실제적으로 사용법은 다음과 같습니다.

 function passwords( $publicpassword , #[\SensitiveParameter] $secretpassword ) { throw new \Exception('Error'); } passwords('publicpassword', 'secretpassword');

7. mysqli_execute_query 함수와 mysqli::execute_query 메소드 소개

웹 개발을 위한 다목적 스크립팅 언어인 PHP는 기능과 사용 편의성을 향상시키기 위해 지속적으로 발전하고 있습니다. PHP 8.2에서 개발자는 mysqli_execute_query 함수와 mysqli::execute_query 메서드라는 두 가지 새로운 기능이 도입될 것으로 예상할 수 있습니다. 이러한 추가 기능은 데이터베이스 상호 작용을 간소화하고 단순화하여 MySQL 데이터베이스 작업을 더욱 편리하게 만들도록 설계되었습니다.

mysqli_execute_query 함수

mysqli_execute_query 함수는 PHP의 MySQLi 확장에 추가된 강력한 기능입니다. 이는 MySQL 데이터베이스에 대해 SQL 쿼리를 실행하도록 특별히 맞춤화되었습니다. 이 기능은 SQL 쿼리를 보내고 결과를 검색하는 간단하고 효율적인 방법을 제공합니다. 다음은 그 사용법에 대한 간단한 예입니다:

 $mysqli = new mysqli("localhost", "username", "password", "database"); $sql = "SELECT * FROM users WHERE status = ?"; $stmt = $mysqli->prepare($sql); $status = "active"; $stmt->bind_param("s", $status); $result = mysqli_execute_query($stmt); while ($row = $result->fetch_assoc()) { } $stmt->close(); $mysqli->close();

mysqli_execute_query 함수는 매개변수 바인딩을 통해 보안을 유지하면서 쿼리 준비 및 실행 프로세스를 간소화합니다.

mysqli::execute_query 메서드

새로운 기능 외에도 PHP 8.2에는 MySQLi 클래스의 일부로 mysqli::execute_query 메서드가 도입되었습니다. 이 방법은 객체 지향 프로그래밍을 선호하는 개발자를 위해 쿼리 실행을 단순화합니다. 사용법의 예는 다음과 같습니다.

 $mysqli = new mysqli("localhost", "username", "password", "database"); $sql = "SELECT * FROM products WHERE category = ?"; $stmt = $mysqli->prepare($sql); $category = "electronics"; $stmt->bind_param("s", $category); $result = $stmt->execute_query(); while ($row = $result->fetch_assoc()) {} $stmt->close(); $mysqli->close();

mysqli::execute_query 메소드는 데이터베이스 쿼리 실행에 대한 객체 지향 접근 방식을 제공하여 이러한 코딩 스타일을 선호하는 개발자에게 보다 직관적인 경험을 제공합니다.

8. 특성에 상수 허용: 코드 재사용성 및 유지 관리성 향상

특성은 PHP를 포함한 현대 프로그래밍 언어의 귀중한 기능으로, 개발자가 상속 없이도 다양한 클래스에서 코드를 재사용할 수 있도록 해줍니다. PHP 특성은 주로 메서드를 제공하지만 PHP 8.2에서는 특성 내에서 상수를 정의하는 기능이라는 주목할 만한 개선 사항이 도입되었습니다. 이 기능은 코드 구성, 재사용성 및 유지 관리성을 개선하여 개발자에게 코드 설계에 더 많은 유연성을 제공하는 것을 목표로 합니다.

PHP에서 특성의 역할

특성에 상수를 추가하는 방법을 살펴보기 전에 PHP에서 특성의 역할을 간단히 다시 살펴보겠습니다. 특성은 PHP와 같은 단일 상속 언어에서 코드 재사용을 위한 메커니즘입니다. 이를 통해 여러 클래스에서 재사용할 수 있는 메서드 집합을 정의할 수 있습니다. 클래스가 특성을 사용하면 해당 특성에 정의된 메서드를 상속하여 코드 모듈성을 강화하고 중복성을 줄입니다.

 trait Loggable { public function log($message) { }} class User { use Loggable; public function register() { $this->log('User registered.'); }}

이 예에서 Loggable 특성은 특성을 통합하는 모든 클래스에서 사용할 수 있는 로그 메서드를 제공하여 코드의 유지 관리성과 구성을 향상시킵니다.

특성의 상수: 새로운 기능

PHP 8.2를 사용하면 개발자는 이제 이전 버전의 PHP에서는 불가능했던 특성 내에서 상수를 정의할 수 있습니다. 특성의 상수는 클래스의 상수와 유사하게 작동하지만 해당 특성을 사용하는 클래스에서 액세스할 수 있습니다.

 trait Configuration {
const MAX_CONNECTIONS = 10;
}class Database {
use Configuration;
public function connect() { $maxConnections = self::MAX_CONNECTIONS; } }

이 예에서 구성 특성은 해당 특성을 사용하는 데이터베이스 클래스 내에서 액세스할 수 있는 MAX_CONNECTIONS 상수를 정의합니다. 이는 구성 상수의 중앙 집중화를 허용하고 보다 체계적이고 유지 관리 가능한 코드 구조를 촉진합니다.

9. PHP 8.2의 새로운 DNF(Disjunctive Normal Form) 유형 소개

역동적이고 다재다능한 스크립팅 언어인 PHP는 계속해서 증가하는 웹 개발 요구 사항을 충족하기 위해 계속해서 발전하고 있습니다. PHP 8.2가 출시되면서 개발자들은 새로운 DNF(Disjunctive Normal Form) 유형을 도입하게 되었습니다. 이러한 언어 추가로 인해 PHP의 표현력과 유연성이 향상되어 개발자가 복잡한 논리식을 보다 효과적으로 사용할 수 있게 되었습니다.

DNF(접합 정규형) 이해

PHP 8.2의 새로운 DNF 유형을 살펴보기 전에 DNF(Disjunctive Normal Form)가 논리에서 무엇을 나타내는지 이해하는 것이 중요합니다. DNF는 각 표현이 접속사(AND)의 분리(OR)인 논리 표현식을 나타내는 표준 형식입니다. 간단히 말하면, 복잡한 논리문을 OR 연산자로 결합된 일련의 간단한 조건으로 분해하는 방법입니다.

예를 들어 논리식 (A AND B) OR (C AND D)는 두 접속사의 분리이기 때문에 DNF에 있습니다.

PHP 8.2의 새로운 DNF 유형

PHP 8.2에는 논리식을 보다 직관적으로 사용하고 조작하는 방법으로 새로운 DNF 유형이 도입되었습니다. 이러한 DNF 유형은 복잡한 논리를 처리하기 위한 더 높은 수준의 추상화를 제공하므로 개발자가 코드의 복잡한 조건을 더 쉽게 관리할 수 있습니다.

다음은 새로운 DNF 유형과 사용 방법에 대한 개요입니다.

1. DisjunctiveNormalForm

DisjunctiveNormalForm 유형은 DNF의 논리식을 나타냅니다. 복잡한 조건을 캡슐화하기 위해 DisjunctiveNormalForm 인스턴스를 생성할 수 있습니다.

 $dnfExpression = new DisjunctiveNormalForm(
new Conjunction('A', 'B'),
new Conjunction('C', 'D')
);

이 예에서 $dnfExpression은 DNF 표현식 (A AND B) OR (C AND D)를 나타냅니다.

2. 결합

결합 유형은 하나 이상의 조건의 결합(AND)을 나타냅니다. Conjunction 인스턴스를 생성하여 복잡한 접속사를 만들 수 있습니다.

 $conjunction = new Conjunction('A', 'B', 'C');

여기서 $conjunction은 접속사(A AND B AND C)를 나타냅니다.

3. 논리적 가치

LogicalValue 유형은 true, false 또는 변수일 수 있는 간단한 논리값을 나타냅니다. 더 복잡한 표현식을 작성하기 위해 다른 DNF 유형과 함께 사용할 수 있습니다.

 $value = new LogicalValue('A');

여기서 $value는 논리변수 A를 나타냅니다.

10. AllowDynamicProperties 속성 소개: PHP의 유연성 확장

"AllowDynamicProperties" 속성은 특히 언어의 동적 특성을 중시하는 개발자에게 PHP에 추가된 놀라운 기능입니다. 이 특성을 사용하면 개체가 클래스 내에서 명시적으로 정의되지 않은 속성을 허용하고 조작할 수 있습니다.

다음은 "AllowDynamicProperties" 특성을 적용할 수 있는 방법에 대한 간단한 예입니다.

 class DynamicObject {
}
$dynamicObj = new DynamicObject();
$dynamicObj->newProperty = "This is a dynamic property.";
echo $dynamicObj->newProperty;

이 예에서 "DynamicObject" 클래스는 속성을 동적으로 추가하고 액세스할 수 있는 "AllowDynamicProperties" 특성으로 표시됩니다. 이러한 동적 동작은 다양한 데이터 구조에 적응해야 하는 개체를 처리할 때나 API와 같은 외부 소스의 데이터로 작업할 때 특히 유용할 수 있습니다.

PHP 8.2의 지원 중단 및 제거

  • 확장 기능: PHP 8.2에서는 "oci8", "mysql", "mcrypt" 및 "interbase"를 포함하여 오래되고 유지 관리되지 않는 여러 확장 기능에 작별을 고했습니다. 이러한 확장 기능을 사용하는 개발자는 애플리케이션의 보안과 안정성을 보장하기 위해 최신 대안으로 마이그레이션하는 것이 좋습니다.
  • Each() 함수 : Each() 함수는 이제 PHP 8.2에서 공식적으로 더 이상 사용되지 않습니다. 이 함수는 내부 포인터를 전진시키고 현재 키-값 쌍을 반환하여 배열을 반복하는 데 사용되었습니다. 그러나 다양한 문제가 있었고 더 나은 가독성과 유지 관리성을 제공하는 foreach 루프로 대체되었습니다.
  • create_function() 함수 : create_function() 함수는 더 이상 사용되지 않는 것으로 표시됩니다. 이 함수는 익명 함수를 동적으로 생성하는 데 사용되었지만 보안 문제 및 클로저와 같은 더 나은 대안으로 인해 권장되지 않았습니다.
  • FILTER_SANITIZE_MAGIC_QUOTES 필터 플래그 : FILTER_SANITIZE_MAGIC_QUOTES 필터 플래그는 더 이상 사용되지 않습니다. 이 플래그는 작은따옴표나 큰따옴표와 같은 문자 앞에 슬래시를 추가하여 입력을 삭제하기 위해 filter_var()와 함께 사용되었습니다. 최신 모범 사례에서는 준비된 문과 매개변수화된 쿼리를 사용하여 데이터베이스 입력을 처리하므로 이 플래그를 더 이상 사용하지 않는 것이 좋습니다.
  • stristr() 함수 : 문자열의 하위 문자열에 대해 대소문자를 구분하지 않고 검색을 수행하는 stristr() 함수는 더 이상 사용되지 않습니다. 여전히 작동하지만 개발자는 더 나은 명확성을 위해 대소문자를 구분하지 않는 버전인 Stripos() 또는 대안 str_contains()를 사용하는 것이 좋습니다.
  • 배열 인수를 사용하는 정의() : 배열을 사용하여 상수를 값으로 정의하기 위해 정의()를 사용하는 것은 이제 더 이상 사용되지 않습니다. 배열을 값으로 사용하여 상수를 정의하는 것이 가능했지만 이러한 방식은 관습에 얽매이지 않는 것으로 간주되며 상수는 일반적으로 스칼라 값을 가져야 합니다.
  • SORT_NUMERIC 및 SORT_REGULAR 플래그 : sort() 및 usort()와 같은 정렬 함수에 대한 SORT_NUMERIC 및 SORT_REGULAR 플래그는 더 이상 사용되지 않습니다. PHP가 자동으로 요소의 데이터 유형을 감지하고 그에 따라 정렬하므로 이러한 플래그는 더 이상 필요하지 않습니다.

성능 개선

PHP 8.2는 내부적으로 다양한 성능 향상과 최적화를 제공합니다. 이러한 개선 정도는 특정 사용 사례에 따라 다를 수 있지만 PHP 8.2로 업그레이드하면 몇 가지 주목할 만한 성능 이점을 얻을 수 있습니다. 이러한 개선 사항은 트래픽이 많은 애플리케이션이나 리소스 집약적인 작업을 수행하는 애플리케이션에 상당한 영향을 미쳐 응답성과 효율성을 높일 수 있습니다.

버그 수정 및 안정성

새로운 PHP 릴리스와 마찬가지로 PHP 8.2도 수많은 버그와 안정성 문제를 해결합니다. 이러한 수정 사항은 언어의 전반적인 안정성을 유지하고 PHP가 웹 개발을 위한 강력한 선택이 되도록 보장하는 데 중요합니다.

FAQ - PHP 8.2의 새로운 기능

PHP 8.2에 암시적 괄호에 대한 지원 중단 알림이 도입된 이유는 무엇입니까?

암시적 괄호에 대한 지원 중단 알림은 개발자에게 함수 호출 시 괄호를 사용하도록 경고하여 일관된 코드 스타일을 장려합니다. 이를 통해 코드 명확성과 유지 관리성이 향상됩니다.

읽기 전용 클래스란 무엇이며 PHP 8.2에서 어떻게 작동합니까?

PHP 8.2의 읽기 전용 클래스를 사용하면 일반적으로 객체 생성 중에 속성을 한 번만 설정할 수 있으므로 해당 속성이 객체의 수명 내내 일정하게 유지됩니다. 읽기 전용 속성은 readonly 수정자를 사용하여 선언됩니다.

mysqli_execute_query 함수와 mysqli::execute_query 메서드는 PHP 8.2에서 데이터베이스 상호 작용을 어떻게 단순화합니까?

이러한 기능은 MySQL 데이터베이스에 대해 SQL 쿼리를 실행하는 프로세스를 간소화하여 절차적으로 또는 객체 지향 방식으로 쿼리를 보내고 결과를 검색하는 효율적이고 안전한 방법을 제공합니다.

"AllowDynamicProperties" 속성은 PHP 8.2의 유연성을 어떻게 확장합니까?

"AllowDynamicProperties" 특성을 사용하면 객체가 해당 클래스 내에서 명시적으로 정의되지 않은 속성을 허용하고 조작할 수 있으므로 PHP의 동적 특성이 향상됩니다.

PHP 8.2에서 버그 수정과 안정성이 중요한 이유는 무엇입니까?

PHP 8.2의 버그 수정 및 안정성 개선은 언어의 전반적인 안정성을 유지하는 데 중요하며, 문제를 해결하고 안정성을 향상시켜 PHP가 웹 개발을 위한 강력한 선택으로 남아 있도록 보장합니다.

결론

결론적으로, PHP 8.2는 끊임없이 진화하는 웹 개발 환경에서 중추적인 이정표로 등장합니다. 다양한 혁신적인 기능, 향상된 유연성, 성능 최적화를 통해 전 세계 개발자의 진화하는 요구를 충족합니다.

열거형, 생성자 승격, 읽기 전용 클래스, 명명된 인수 및 AllowDynamicProperties 특성의 도입으로 개발자는 더욱 깔끔하고 유지 관리하기 쉬운 코드를 작성할 수 있습니다. 또한 새로운 DNF(Disjunctive Normal Form) 유형은 PHP에 고급 논리 조작 기능을 제공하여 다양성을 더욱 확장합니다. 그러나 PHP가 발전함에 따라 버그를 부지런히 해결하는 동시에 오래된 확장 기능과 기능에 작별을 고하여 웹 개발을 위한 안정적이고 안전한 선택으로 남아 있습니다.

관련된 컨텐츠:

"WordPress PHP 업데이트 비활성화 필요" 오류를 수정하는 방법(2가지 방법)

MySQL 느린 쿼리 로그