source

PHP에서 람다는 무슨 용도입니까?

bestscript 2023. 8. 8. 23:27

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 키워드를 사용하면 폐쇄 내부에서 엔클로저 함수에 전달되거나 생성된 변수를 사용할 수 있습니다.이 기능은 매개 변수 목록에서 제한된 콜백 함수에 매우 유용합니다."사용" 변수는 폐쇄 외부에서 정의할 수 있으므로 폐쇄가 호출될 때마다 다시 정의할 필요가 없습니다.

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변수보다 작음b의 조합에 관계없이a그리고.b개체 클래스를 처리할 수 있는 일반 정렬 알고리즘을 만들려면 비교기로 사용할 함수를 수락하도록 정렬 함수 정의를 만들 수 있습니다.람다를 비교기 함수로 제공한다는 것은 이 정렬 사례를 처리하기 위해 스크립트의 수명 동안 지속되는 "실제" 함수를 정의할 필요 없이 호출별로 정렬 동작을 정의할 수 있다는 것을 의미합니다.

람다 함수에 대해 생각할 수 있는 모든 사용에도 불구하고 PHP에서는 클로저라고 불리는 매우 특별한 것을 허용합니다.즉, 현재 스코프의 변수를 현재 스코프가 존재하지 않게 된 후 한참 후에 함수에 사용할 수 있도록 만드는 기능입니다.

클로징이 허용하는 몇 가지 유용한 패턴을 언급하자면, 메모화(캐싱)와 커리를 구현할 수 있습니다.

또한 @Matt가 답변에서 강조한 일회용 또는 콜백 기능도 매우 유용합니다.

마감에 대한 자세한 내용은 다음 질문을 참조하십시오.자바스크립트 폐쇄는 어떻게 작동합니까?

암호화된 Y 결합기의 구현?

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);
    });
  });
}

인용 출처: http://fabien.potencier.org/article/17/on-php-5-3-lambda-functions-and-closures

언급URL : https://stackoverflow.com/questions/1909002/what-use-is-lambda-in-php