람다 익명 함수는 PHP 5.3의 일부입니다. 어떤 용도로 사용합니까? 람다 만 할 수있는 것이 있습니까? 특정 작업에 대해 lambda가 더 낫습니까?PHP에서 lambda는 어떤 용도로 사용됩니까?
피보나치 예제를 보았습니다. 피보나치 시퀀스를 작성할 필요가 없으므로 웹 애플리케이션을 작성하는 과정에서 유용 할 수 있는지 확실하지 않습니다. 그렇다면 "실제 생활"에서 무엇을합니까?
람다 익명 함수는 PHP 5.3의 일부입니다. 어떤 용도로 사용합니까? 람다 만 할 수있는 것이 있습니까? 특정 작업에 대해 lambda가 더 낫습니까?PHP에서 lambda는 어떤 용도로 사용됩니까?
피보나치 예제를 보았습니다. 피보나치 시퀀스를 작성할 필요가 없으므로 웹 애플리케이션을 작성하는 과정에서 유용 할 수 있는지 확실하지 않습니다. 그렇다면 "실제 생활"에서 무엇을합니까?
아마도 한 번만 사용하는 임시 기능이 필요합니다.
일예를 :
I는 다음과 같은 기능을 위해, 콜백을 사용하는 것이
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;'));
감사합니다, Matt! 예를 들려 주시겠습니까? 그리고 그것이 대안이 아닌 (왜 명백하지 않은 한) 이유는 무엇입니까? :) – user151841
확실히, 내 업데이트를 참조하십시오 – Matt
동의합니다. 많은 배열 처리 함수는 콜백을 사용하므로 익명의 함수를 사용할 수있게되어 더욱 행복합니다. – ryanday
람다하여보다 편리하게 몇 가지 사용 사례가 있습니다. 예를 들어, 메서드가 콜백을 사용하는 경우 해당 콜백에 람다를 사용하면 처리 할 어딘가에 "실제"함수를 정의 할 필요가 없다는 것을 의미합니다. 따라서 람다는 코드를보다 깨끗하게 유지합니다.
위와 마찬가지로 람다는 "단 수명"기능으로 사용할 수 있습니다. 예를 들어 정렬 알고리즘은 일반적으로 a
과 b
의 조합에 대해 변수 a
이 변수 b
보다 작은 지 알아야합니다. 모든 객체 클래스를 처리 할 수있는 일반 정렬 알고리즘을 만들려면 비교 함수로 사용할 함수를 허용하는 정렬 함수 정의를 만들 수 있습니다. 비교 함수로서 람다를 제공한다는 것은 스크립트의 수명 동안 살 수있는 "실제"함수를 정의 할 필요없이이 하나의 정렬 경우를 처리하기 위해 호출 기준으로 정렬 동작을 정의 할 수 있음을 의미합니다.
암호 C 결합 자의 구현은 무엇입니까?
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
글쎄, 이건 멋지지만 정확히 내가 쓰지 않는 교과서 Comp Sci 예제 인 것 같다.) 어쨌든 그것을 사용하는 것은 무엇인가? – user151841
아, 사용하지 않아서 원본을 인용했습니다.> – stormist
익명 기능 (폐쇄)는 (다단이 제안 따라서, 글로벌 공간 pollluting 생략) 로컬 함수로 생성 될 수있다.
"사용"키워드를 사용하면 둘러싼 함수에서 전달되거나 작성되는 변수를 클로저 내부에서 사용할 수 있습니다. 이는 매개 변수 목록에서 제한된 콜백 함수에서 매우 유용합니다. "사용"변수는 클로저 외부에서 정의 될 수 있으므로 클로저가 호출 될 때마다 다시 정의 할 필요가 없습니다.
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);
(물론,이 예제는 폐쇄없이 간단 할 수 있지만, 데모 단지.) 하나는 람다 함수에 대해 생각할 수있는 용도의 모든에도 불구하고
, PHP에서도 뭔가를 매우 수 있습니다 클로저라는 특수그것은 현재 스코프가 존재를 멈춘 후에도 오랫동안 함수가 현재 스코프에서 변수를 사용할 수있게하는 능력입니다.
클로저가 허용하는 유용한 패턴을 언급하기 만하면 Memoization (Caching)과 Curry을 구현할 수 있습니다.
던지기 또는 @Matt가 대답에 강조 표시 한 콜백 함수도 매우 유용합니다. How do JavaScript closures work?
큰 질문 큰 응답 :
클로저에 대한 자세한 내용은이 질문을 확인하십시오. 나는 내가 람다 함수가 무엇인지, 그리고 PHP에서 (그들이 jQuery에서 항상 사용하기 때문에) 어떻게 사용할 수 있는지 알고 있었다. 그러나 나는 그것에 대해 생각하고 싶지 않았다. 누군가가 무작위로 질문 할 때까지 그냥 무시했다. 그것. 나는 내 가정을 검증하기에는 너무 게으 렀지 만 우연히 대답을 찾는 것이 나를 위해 완벽하게 작동합니다. 다시 .. 고마워. :) – KyleFarris
OK, 모든 과대 광고 ("Lambda the Ultimate")와 PHP가가는 한 람다 함수에서 전체 언어를 빌드 할 수 있다는 사실을 넘어서는 것은 단일 사용, 기능. 그것이 내가받는 메시지입니다. – user151841