>  기사  >  백엔드 개발  >  PHP 함수의 익명 함수 및 클로저 구현에 대한 자세한 설명

PHP 함수의 익명 함수 및 클로저 구현에 대한 자세한 설명

伊谢尔伦
伊谢尔伦원래의
2017-05-17 14:13:402804검색

php는 콜백 기능을 지원하는데, 이는 다른 고급 언어에 비해 더 많은 포인트를 추가하는 기능입니다. 그러나 JavaScript와 비교하면 php5.3 이전의 콜백 함수 사용은 그다지 유연하지 않습니다. 문자열 함수 이름 create_function 의 반환 값을 사용하는 것입니다. php5.3 이후에는 또 다른 옵션인 익명 함수가 있습니다. 클로저 함수(클로저)라고도 하며, 이를 통해 지정되지 않은 함수 이름을 일시적으로 생성할 수 있습니다. 콜백 함수 매개변수의 값입니다. 물론 다른 응용 프로그램도 있습니다. 이전 장에서는 PHP 콜백 함수의 자세한 사용법을 소개했습니다. 이번 장에서는 PHP의 익명 또는 클로저 사용자 정의 함수에 대해 설명하겠습니다.

여기에서는 익명 또는 클로저 사용자 정의 함수의 예를 들어 사용자 정의 함수를 선언하고 이름이 지정되지 않은 함수를 변수에 할당합니다. 변수 바로 뒤에 괄호를 추가하고 매개변수를 전달하여 익명 함수를 호출하고 출력합니다.

익명 함수의 샘플 코드는 다음과 같습니다.

<?php
/** 匿名或者闭包函数实例 */
 $fun = function($a){
   echo $a;             //将一个没有名字的函数赋值给一个变量$fun
 };
 $fun("php.cn");        //变量后加括号并传参数,调出匿名函数并输出
?>

익명 함수도 변수의 값으로 사용할 수 있습니다. 익명 함수를 콜백 함수에 매개변수로 직접 전달하는 것은 익명 함수의 가장 일반적인 용도로, 결국 세미콜론을 추가하는 것을 잊어버립니다.

콜백 함수 호출 시 익명 함수를 매개변수로 취하는 코드 예시는 다음과 같습니다.

<?php
/** 申明函数callback,需要传递一个匿名函数作为参数 */
function callback($back){
 echo $back();             //参数只有是一个函数时才能在这里调用
}
callback(function(){        //调用函数的同时直接传入一个匿名函数
 echo "闭包数据";
});
?>

클로저의 중요한 개념은 외부 변수가 내부 함수에 사용하려면 use 키워드를 사용하여 클로저 함수와 외부 변수를 연결해야 합니다. 이러한 변수는 함수 또는 클래스의 선두에 선언되어야 합니다. 클로저 함수는 상위 범위에서 변수를 상속하는데, 이는 전역 변수를 사용하는 것과 다릅니다. 전역 변수는 현재 실행 중인 함수에 관계없이 전역 범위에 존재합니다. 클로저의 상위 범위는 클로저 함수를 정의하며 반드시 이를 호출하는 함수일 필요는 없습니다.

아래에서는 함수를 선언하고 익명 함수를 매개변수로 전달하는 클로저의 예를 보여줍니다. 여기서 매개변수는 함수인 경우에만 호출할 수 있습니다. 내부 함수의 외부 변수. 함수를 호출할 때 익명 함수를 직접 전달합니다.

use 키워드의 사용 코드는 다음과 같습니다.

<?php
/** 申明函数callback,需要传递一个匿名函数作为参数 */
function callback($back){
 echo $back();             //参数只有是一个函数时才能在这里调用
}
$var = "测试数据";    //闭包的一个重要概念就是内部函数中使用外部变量,通过 use 关键字实现
callback(function() use(&$var){        //调用函数的同时直接传入一个匿名函数
 echo "闭包数据的:{$var}";
});
?>

참고: 위의 예에서 use가 참조하는 변수는 $var의 복사본입니다. 을 완전히 인용하려면 위의 예와 같이 & 기호를 추가해야 합니다.

【관련 튜토리얼 추천】

1. "php.cn Dugu Jiujian (4) - PHP 비디오 튜토리얼 "

2. 익명 함수 및 클로저 구현: 함수 표현식 및 클로저의 원리

3. PHP 실용 동영상 튜토리얼

위 내용은 PHP 함수의 익명 함수 및 클로저 구현에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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