>백엔드 개발 >PHP 튜토리얼 >PHP8.1에는 생성기 개선 사항이 도입되었습니다.

PHP8.1에는 생성기 개선 사항이 도입되었습니다.

WBOY
WBOY원래의
2023-07-07 22:57:051148검색

PHP8.1에서는 Generators가 개선되었습니다.

Generators는 PHP 5.5에 도입된 강력한 기능으로, 반복자를 구현하는 보다 효율적인 방법을 제공합니다. PHP 8.1 버전에서는 Generators가 몇 가지 중요한 개선을 거쳐 개발자에게 더 많은 편의성과 유연성을 제공합니다. 이 기사에서는 이러한 개선 사항을 살펴보고 코드 예제를 통해 그 사용법을 설명합니다.

1. 키 이름 및 키 값 반환 ​

PHP 8.1 이전 버전에서는 생성기가 키 값만 반환하거나 키 이름만 반환할 수 있습니다. 이는 일부 애플리케이션 시나리오에서는 충분히 유연하지 않을 수 있으며 키 이름과 키 값을 동시에 반환해야 하는 요구를 충족하려면 다른 방법을 사용해야 합니다. PHP 8.1에서는 새로운 Yield를 구문으로 사용하여 키 이름과 키 값을 모두 얻을 수 있습니다. 예는 다음과 같습니다.

function myGenerator()
{
    yield 'a' => 1;
    yield 'b' => 2;
    yield 'c' => 3;
}

$generator = myGenerator();

foreach ($generator as $key => $value) {
    echo "$key => $value" . PHP_EOL;
}

위 코드를 실행하면 다음과 같은 결과가 나옵니다.

a => 1
b => 2
c => 3

Yield as 구문을 통해 반복자를 순회할 때 키 이름과 키 값을 동시에 얻을 수 있어 크게 향상됩니다. 코드의 단순성과 가독성.

2. Generator 준비

PHP 8.1 이전 버전에서는 Generator 객체를 생성하면 즉시 실행이 시작되며 일시 중지할 수 없습니다. 어떤 경우에는 실제로 Generator 객체를 사용하기 전에 몇 가지 준비 작업을 수행하고 싶습니다.

PHP 8.1에는 Generator 객체를 시작하고 실행을 일시 중지하기 위해 send()라는 새로운 메서드가 추가되었습니다. 생성기 개체가 시작되기 전에 필요한 초기화 작업을 수행한 다음 필요할 때 send() 메서드를 사용하여 생성기 실행을 다시 시작할 수 있습니다. 예는 다음과 같습니다.

function myGenerator()
{
    $data = yield; // 等待 send() 方法的传值
    yield $data;
}

$generator = myGenerator();

$generator->send(123);

foreach ($generator as $value) {
    echo $value . PHP_EOL;
}

위 코드를 실행하면 다음과 같은 출력이 표시됩니다.

123

send() 메서드를 사용하여 생성기 개체가 시작되기 전에 매개변수를 전달하면 실행 중에 필요한 변경을 수행할 수 있습니다. 코드 유연성과 확장성을 향상시키기 위한 생성기 작업입니다.

3. 매개변수 유형의 느슨한 일치

PHP 8.1 이전에는 생성기의 키 이름과 키 값의 유형이 foreach 루프 변수의 유형과 정확히 일치하지 않으면 엄격한 유형 오류가 발생합니다. PHP 8.1에서는 매개변수 유형의 완화된 일치가 도입되었으며 유형을 캐스팅할 수 있을 때 더 이상 오류가 발생하지 않습니다.

예는 다음과 같습니다.

function myGenerator()
{
    yield 1 => 'a';
    yield 2 => 'b';
    yield 3 => 'c';
}

$generator = myGenerator();

foreach ($generator as $index => $letter) {
    echo $index . ' => ' . $letter . PHP_EOL;
}

위 코드를 실행하면 다음과 같은 출력이 표시됩니다.

1 => a
2 => b
3 => c

보시다시피 생성기의 키 이름은 정수이지만 foreach 루프 변수의 유형은 끈. PHP 8.1에서는 이 상황이 더 이상 오류를 보고하지 않지만 유형 변환을 수행하고 결과를 정상적으로 출력합니다.

요약:

PHP 8.1에 도입된 향상된 제너레이터는 개발자에게 더 많은 유연성과 편의성을 제공합니다. 우리는 키 이름과 키 값을 모두 얻기 위한 구문으로 Yield를 사용하고, send() 메서드를 통해 생성기의 예열 작업을 구현하고, 유형이 정확히 일치하지 않는 경우 매개변수 유형을 느슨하게 일치시킬 수 있습니다. 이러한 개선으로 인해 Generator는 실제 응용 프로그램에서 더욱 강력하고 사용하기 쉬워졌습니다.

위는 PHP 8.1에 도입된 Generators의 개선사항 및 샘플 코드입니다. 이 글이 제너레이터를 이해하고 사용하는 데 도움이 되기를 바랍니다.

위 내용은 PHP8.1에는 생성기 개선 사항이 도입되었습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.