> 백엔드 개발 > PHP 튜토리얼 > PHP의 트랜스 듀서가 쉽게 만들어졌습니다

PHP의 트랜스 듀서가 쉽게 만들어졌습니다

Christopher Nolan
풀어 주다: 2025-02-15 11:36:11
원래의
893명이 탐색했습니다.
심층적 인 PHP 기능 프로그래밍 : 트랜스 듀서 탐색

기능적 프로그래밍과 고급 기능에 대해 들어 보았을 수도 있지만 트랜스 듀서를 알고 있습니까? 이 기사에서는이 강력한 데이터 변환 도구를 탐색하게됩니다.

코어 포인트 :

트랜스 듀서는 Clojure에서 유래하고 Michael Dowling에 의해 PHP로 포팅되며 재사용 가능한 알고리즘 변환을 구축하는 강력한 방법입니다. 그것들은 하나의 축소 함수를 받아들이고 다른 감소 기능을 반환하는 기능입니다. Transducers in PHP Made Easy PHP의 트랜스 듀서 패키지를 사용하면 이름의 이니셜을 활용하거나 사용자 목록에서 미성년자를 제거하는 등 다양한 방식으로 데이터를 변환 할 수 있습니다. 변환은 재사용을 위해 단일 트랜스 듀서로 결합 될 수 있습니다.

트랜스 듀서의 감소 함수는 매개 변수로서 값을 수신하고 "init"(init), "결과"(최종 결과) 및 "step"(READE) 로직을 포함하는 세 가지 요소를 포함하는 축소 함수 배열을 반환합니다.

트랜스 듀서의 장점은 데이터 변환 프로세스를 실제 데이터 소스와 분리하여 코드를보다 모듈화하고 유지 관리하기가 더 쉽다는 것입니다. 이를 통해 모든 데이터 소스에서 사용할 수있는 재사용 가능한 소프트웨어 구성 요소를 생성 할 수 있습니다. 그러나 기능적 프로그래밍 뿌리로 인해 기존 PHP 기능보다 더 복잡 할 수 있습니다.

    트랜스 듀서 정의
  • 트랜스 듀서를 이해하려면 먼저 감속기를 이해해야합니다. Rich Hickey 인용 :
  • 감소 함수는 정확히 로 전달되는 함수 유형입니다. 지금까지 결과를 수신하고 새로운 입력을 수신하고 지금까지 다음 결과를 반환합니다.
  • 트랜스 듀서는 하나의 축소 함수를 수신하고 다른 축소 함수를 반환하는 함수입니다.
  • 트랜스 듀서는 처음에 Rich Hickey에 의해 Clojure에 도입되었고 Michael Dowling에 의해 PHP에 포팅되었습니다. 트랜스 듀서는 다양한 상황에서 재사용 할 수있는 알고리즘 변환을 구축하는 강력한 방법입니다. 이 기사는 일련의 실제 사례를 통해 사용을 탐색 할 것입니다.

예 진행하기 전에 작곡가를 통해 트랜스 듀서 패키지를 설치해야합니다.

우리는 다음 예제에 간단한 사용자 클래스를 사용합니다.

reduce 함수는 PHP의

함수와 유사합니다. 우리는 호출 가능 함수를 전달합니다.이 경우 사용자 이름 초기를 대문자로 변합니다.
우리는
트랜스 듀서를 적용하기 위해 함수를 사용합니다. 데이터를 첫 번째 매개 변수로, 트랜스 듀서를 두 번째 매개 변수로 사용합니다.

데이터 매개 변수와 동일한 유형의 값을 반환합니다 (이 경우 배열). 배열을 엄격히 출력 해야하는 경우 도 사용할 수도 있습니다.

우리는 또한

를 사용하여 출력을 문자열로 변환하거나

를 사용하여 출력을 특정 유형으로 변환 할 수 있습니다. 자세한 내용은 문서를 참조하십시오.

composer require mtdowling/transducers
로그인 후 복사
로그인 후 복사
class User
{
    public $id;
    public $name;
    public $age;

    public function __construct($id, $name, $age)
    {
        $this->id = $id;
        $this->name = $name;
        $this->age = $age;
    }

    public function __toString()
    {
        return sprintf("\n%d - %s - %d", $this->id, $this->name, $this->age);
    }
}

// 示例数据
$data = [
    new User(1, "younes", 24),
    new User(2, "youssef", 26),
    new User(3, "hamza", 25),
    new User(4, "ismail", 17),
];
로그인 후 복사
트랜스 듀서의 가장 중요한 부분은 여러 전환을 하나의 트랜스 듀서로 결합 할 수 있다는 것입니다. 예를 들어, 사용자 이름의 초기 문자를 대문자로 자본화하고 미성년자를 삭제하겠습니다.

<🎜 🎜>
use Transducers as t;

$uppercase = t\map(function($user) { 
    return new User($user->id, ucfirst($user->name), $user->age); 
});

$result = t\xform($data, $uppercase);

var_dump($result);
로그인 후 복사
함수는 php의

함수와 유사합니다. <🎜 🎜> 함수는 트랜스 듀서 목록에서 트랜스 듀서를 생성합니다. filter array_filter 이제 우리는이 표준에 따라 데이터를 줄이기 위해 언제든지 재사용 가능한 트랜스 듀서 조합을 가지고 있습니다. 사용 가능한 축소 기능 목록은 문서를 확인하십시오. comp 트랜스 듀서 생성 <🎜 🎜> 감소 함수는 값을 매개 변수로 수신하고 세 가지 요소를 포함 해야하는 축소 함수 배열을 반환합니다. uppercase <🎜 🎜> <<> : 트랜스 듀서의 초기 값을 반환하는 함수. 초기 값이 제공되지 않으면 첫 번째 호출에서만 호출됩니다. map <🎜 🎜> <<> : removeMinors 함수는 통화 스택에서 최종 결과를 빌드하는 데 사용됩니다. filter

<<> : 이곳은 축소 로직을 작성하는 곳입니다. 감소 로직에 따라 0 또는 여러 번 호출 할 수 있습니다.
// 输出
array(4) {
  [0]=>
  object(User)#14 (3) {
    ["id"]=>
    int(1)
    ["name"]=>
    string(6) "Younes"
    ["age"]=>
    int(24)
  }
  [1]=>
  object(User)#15 (3) {
    ["id"]=>
    int(2)
    ["name"]=>
    string(7) "Youssef"
    ["age"]=>
    int(26)
  }
  [2]=>
  object(User)#16 (3) {
    ["id"]=>
    int(3)
    ["name"]=>
    string(5) "Hamza"
    ["age"]=>
    int(25)
  }
  [3]=>
  object(User)#17 (3) {
    ["id"]=>
    int(4)
    ["name"]=>
    string(6) "Ismail"
    ["age"]=>
    int(17)
  }
}
로그인 후 복사

이것은 실제 코드없이 매우 혼란스러워 지므로

트랜스 듀서 기능을 예로 들어 봅시다. 데이터 배열 상단에서 N 항목을 가져옵니다.

다음은

감소 함수의 소스 코드입니다.
  • <🎜 🎜> init 함수는
  • 매개 변수로 여러 번 호출됩니다. 호출 할 때마다 <🎜 🎜> 변수를 줄이고 0보다 작은 지 테스트합니다. 이 경우 result 객체 인스턴스를 반환하여 스톱 포인트를 나타냅니다. result 트랜스 듀서 함수 예제는 데이터에서 빈 요소를 제거합니다. 트랜스 듀서의 작동 방식에 대한 이전 설명을 사용하여
  • 변수에 액세스하고 다음 <🎜 콜백을 호출 할 것인지 또는 간단히 값을 반환할지 결정할 수 있습니다.
  • step 우리는 <🎜 🎜> 변수에 빈 항목을 추가하여 이것을 테스트 할 수 있습니다.

take 결론 <🎜 🎜> <,>이 기사에서는 트랜스 듀서 (Transducers)라는 기능 프로그래밍 세계의 새로운 측면을 이해합니다. 데이터 변환이 쉬운 경우에도 트랜스 듀서의 목적을 검토합니다. 또한 트랜스 듀서의 가치를 더 잘 보여주기 위해 몇 가지 예를 검토했습니다. 이제 개발자 도구 상자에 새로운 도구가 있거나 최소한 트랜스 듀서 개념을 더 잘 이해하고 있습니다.

트랜스 듀서에 대해 궁금한 점이 있으면 아래에 게시 할 수 있습니다!
// ...
$result = t\to_array($data, $uppercase);
// ...
로그인 후 복사
php
use Transducers as t;

$uppercase = t\map(function($user) { 
    return new User($user->id, ucfirst($user->name), $user->age); 
});

$result = t\to_string($data, $uppercase);

var_dump($result);
로그인 후 복사
의 트랜스 듀서에 대한 FAQ PHP에서 트랜스 듀서의 기본 개념은 무엇입니까?

PHP의 트랜스 듀서는 복합 가능하고 재사용 가능한 소프트웨어 구성 요소를 만들 수있는 데이터 처리 기술입니다. 그것들은 기본적으로 감속기를 받아들이고 새로운 감속기를 반환하는 기능입니다. 이 개념은 Clojure와 JavaScript에서 빌려주고 PHP에 적용되었습니다. 트랜스 듀서를 사용하면 데이터 변환 프로세스를 실제 데이터 소스와 분리 할 수 ​​있으므로 코드가 모듈화되고 유지 관리하기가 쉽습니다.

트랜스 듀서는 기존 PHP 기능과 어떻게 다릅니 까?

전통적인 PHP 함수는 일반적으로 데이터를 얻고 변환하는 프로세스를 결합하여 코드가 유지하고 재사용하기가 어렵습니다. 반면에 트랜스 듀서는 두 프로세스를 분리합니다. 즉, 특정 방식으로 데이터를 변환하는 트랜스 듀서를 작성한 다음 모든 데이터 소스와 함께 사용하여 코드를보다 유연하고 재사용 할 수 있습니다.

PHP에서 트랜스 듀서의 예를 제공 할 수 있습니까?

물론 간단한 예를 고려해 봅시다. 숫자 배열이 있고 각 숫자에 1을 추가하려고한다고 가정하십시오. 이 작업을 수행하는 트랜스 듀서를 만들 수 있습니다

그런 다음 감소 기능 및 데이터 소스와 함께이 트랜스 듀서를 사용할 수 있습니다.

다른 데이터 소스와 함께 트랜스 듀서를 사용하는 방법은 무엇입니까?

트랜스 듀서는 모든 데이터 소스와 함께 사용되도록 설계되었습니다. 전체 데이터 소스 수준이 아닌 단일 데이터 항목 수준에서 실행되기 때문입니다. 따라서 배열, 데이터베이스 쿼리 결과, 네트워크 연결의 데이터 스트림 등으로 트랜스 듀서를 사용할 수 있습니다. 유일한 요구 사항은 데이터 소스가 축소 기능으로 작업 할 수 있어야한다는 것입니다.

PHP에서 트랜스 듀서를 사용하면 어떤 이점이 있습니까?

트랜스 듀서는 많은 이점을 제공합니다. 데이터 변환 프로세스를 실제 데이터 소스와 분리하여 코드를보다 모듈화하고 유지 관리하기가 쉽습니다. 또한 모든 데이터 소스에서 사용할 수있는 재사용 가능한 소프트웨어 구성 요소를 만들 수 있습니다. 마지막으로, 트랜스 듀서는 단일 데이터 항목에서 작동하기 때문에 큰 데이터 세트를 처리 할 때 기존 PHP 기능보다 효율적 일 수 있습니다.

PHP에서 트랜스 듀서를 사용하는 단점은 무엇입니까?

트랜스 듀서는 많은 이점을 제공하지만 기존 PHP 기능보다 더 복잡 할 수도 있습니다. 일부 PHP 개발자에게는 익숙하지 않을 수있는 기능 프로그래밍 개념이 포함되기 때문입니다. 그러나 트랜스 듀서의 작동 방식을 이해하면 깨끗하고 효율적이며 재사용 가능한 코드를 작성하는 강력한 도구가 될 수 있습니다.
composer require mtdowling/transducers
로그인 후 복사
로그인 후 복사
트랜스 듀서가 PHP 프레임 워크와 함께 사용할 수 있습니까?

예, 트랜스 듀서는 모든 PHP 프레임 워크와 함께 사용할 수 있습니다. 특정 프레임 워크 기능에 의존하지 않는 일반적인 데이터 처리 기술입니다. 그러나 일부 프레임 워크는 트랜스 듀서를 처리하기위한 자체 유틸리티를 제공하여 사용하기 쉽게 할 수 있습니다.

PHP의 트랜스 듀서에 대해 더 많이 배우는 방법은 무엇입니까?

PHP에서 트랜스 듀서를 배울 수있는 많은 리소스가 있습니다. Sitepoint의 기사와 같은 온라인 기사 및 튜토리얼을 읽는 것으로 시작할 수 있습니다. 주제를 더 깊이 포괄하는 책과 온라인 과정도 있습니다. 마지막으로, 자신의 변환기를 작성하여 PHP 프로젝트에서 사용해 볼 수 있습니다.

트랜스 듀서는 다른 프로그래밍 언어로 사용됩니까?

예, 트랜스 듀서의 개념은 Clojure 프로그래밍 언어에서 비롯되었으며 이후 JavaScript 및 PHP를 포함한 다른 여러 언어에 의해 채택되었습니다. 각 언어는 자체 방식으로 트랜스 듀서를 구현하지만 기본 개념은 동일합니다.

PHP 내장 배열 함수와 함께 트랜스 듀서를 사용할 수 있습니까?

예, PHP의 내장 배열 기능과 함께 트랜스 듀서를 사용할 수 있습니다. 그러나 이러한 기능은 특히 큰 배열을 처리 할 때 트랜스 듀서를 사용하는 것만 큼 효율적이지 않을 수 있습니다. 이는 PHP의 배열 기능이 일반적으로 새 배열을 생성하고 트랜스 듀서는 데이터를 제자리에 변환 할 수 있기 때문입니다.

위 내용은 PHP의 트랜스 듀서가 쉽게 만들어졌습니다의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿