Programing

PHP에서 람다는 무엇을 사용합니까?

crosscheck 2021. 1. 7. 19:42
반응형

PHP에서 람다는 무엇을 사용합니까?


람다 익명 함수는 PHP 5.3의 일부입니다. 무슨 소용이 있습니까? 람다로만 할 수있는 일이 있나요? 특정 작업에 람다는 더 나은가요?

저는 피보나치 예제를 보았고 실제로 피보나치 시퀀스를 작성할 필요가 없기 때문에 웹 비시 응용 프로그램을 작성할 때 접하는 작업의 종류에 유용할지 확실하지 않습니다. 그렇다면 "실생활"에서 무엇을할까요?


한 번만 사용할 임시 기능이 필요한 모든 것.

다음과 같은 기능을 위해 콜백에 사용합니다.

usort($myArray, function ($a, $b) {
    return $a < $b;
});

5.3 이전에는 ..

function mySort ($a, $b) {
    return $a < $b;
}
usort($myArray, 'mySort');

또는 create_function ...

usort($myArray, create_function('$a, $b', 'return $a < $b;'));

익명 함수 (클로저)는 로컬 함수로 만들 수 있습니다 (따라서 Dathan이 제안한대로 전역 공간을 오염시키지 않음).

"use"키워드를 사용하면 둘러싸는 함수에 의해 전달되거나 생성 된 변수를 클로저 내부에서 사용할 수 있습니다. 이는 매개 변수 목록에서 제한된 콜백 함수에서 매우 유용합니다. "use"변수는 클로저 외부에서 정의 할 수 있으므로 클로저가 호출 될 때마다 변수를 재정의 할 필요가 없습니다.

function change_array($arr, $pdo)
{
    $keys = array('a', 'c');
    $anon_func = function(& $val, $key) use ($keys, $pdo)
    {
         if (in_array($key, $keys) {
            $pdo->query('some query using $key');
            $val = $pdo->fetch();
        }
    }
    arr_walk($arr, $anon_func);
    return $arr;
}

$pdo = new($dsn, $uname, $pword);
$sample = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4);
$sample = change_array($sample, $pdo);

(물론이 예제는 클로저없이 더 간단 할 수 있지만 데모 용일뿐입니다.)


람다에 의해 더 편리해진 몇 가지 사용 사례가 있습니다. 예를 들어 메서드가 콜백을 사용하는 경우 해당 콜백에 람다를 사용하면이를 처리하기 위해 어딘가에 "실제"함수를 정의 할 필요가 없습니다. 따라서 람다는 코드를 깔끔하게 유지합니다.

위와 마찬가지로 람다는 "단기"함수로 사용할 수 있습니다. 예를 들어, 정렬 알고리즘은 일반적으로 및의 조합에 대해 변수 a가 변수보다 작은 지 여부 만 알면됩니다 . 모든 객체 클래스를 처리 할 수있는 일반적인 정렬 알고리즘을 만들려면 비교기로 사용할 함수를 허용하도록 정렬 함수 정의를 만들 수 있습니다. 람다를 비교 함수로 제공한다는 것은이 하나의 정렬 사례를 처리하기 위해 스크립트 수명 동안 사용할 "실제"함수를 정의 할 필요없이 호출별로 정렬 동작을 정의 할 수 있음을 의미합니다.bab


Despite all of the uses one can think for lambda functions, in PHP it also allows something very special called closure. That is the ability to make variables in the current scope available to the function long after the current scope stops existing.

Just to mention some useful patterns that closure allow you, one can implement Memoization (Caching) and Curry.

Also very useful are the throw-away or callback functions that @Matt highlighted in his answer.

For more on closures, check this question: How do JavaScript closures work?


The implementation of the cryptic Y combinator?

function Y($F)
{
  $func = function ($f) { return $f($f); };

  return $func(function ($f) use($F)
  {
    return $F(function ($x) use($f)
    {
      $ff = $f($f);

      return $ff($x);
    });
  });
}

Cited Source: http://fabien.potencier.org/article/17/on-php-5-3-lambda-functions-and-closures

ReferenceURL : https://stackoverflow.com/questions/1909002/what-use-is-lambda-in-php

반응형