노드 개발에 익숙한 분들은 콜백 함수에 익숙하겠지만, PHP에서는 흔히 사용되지 않습니다. 실제로 PHP는 콜백 함수도 지원합니다. 오늘은 PHP에서 콜백 함수와 익명 함수의 사용법을 자세히 설명하겠습니다.
콜백 함수
콜백 함수: 콜백(즉, 콜백
은 메인 함수에 의해 호출된 후 메인 함수로 돌아갑니다)은 함수 매개변수를 통해 다른 코드로 전달되는 특정 실행 코드 블록에 대한 참조를 나타냅니다. .
사용하기 위해 함수를 다른 함수에 매개변수로 전달하는 것이 널리 사용됩니다. PHP에는 array_map, usort, call_user_func_array 등과 같이 "매개변수를 함수로 요구하는" 함수가 많이 있습니다. 그런 다음 결과를 직접 기본 함수로 반환합니다. 장점은 함수를 값으로 사용하기 편리하고, 코드가 간결하고 가독성이 좋다는 점입니다.
익명 함수:
익명 함수는 이름에서 알 수 있듯이 정해진 함수 이름이 없는 함수입니다. PHP는 익명 함수와 클로저를 동일한 개념으로 취급합니다(익명 함수는 PHP에서 클로저 함수라고도 합니다). 물론 사용법은 변수로만 사용할 수 있습니다.
PHP에서 변수에 함수를 할당하는 방법에는 네 가지가 있습니다.
우리가 자주 사용하는 방법은 함수가 외부에서/또는 PHP에 내장되어 정의되고, 함수 이름이 문자열 매개변수로 직접 전달되는 것입니다. 참고: 클래스 정적 함수인 경우 CLASS::FUNC_NAME으로 전달됩니다.
create_function($args, $func_code);를 사용하여 함수 이름을 반환하는 함수를 만듭니다.
$func_code는 코드 본문이고 $args는 ','로 구분된 매개변수 문자열입니다.
직접 할당: $func_name = function($arg){statement}
익명 함수를 직접 사용하고 함수를 직접 정의합니다.
첫 번째 방법은 일반적으로 사용되기 때문에 더 이상 언급되지 않습니다. 두 번째 방법도 eval() 방법과 마찬가지로 공식적으로 PHP에서 권장되지 않는 것으로 나열되어 있습니다. use 정의 방법이 너무 직관적이지 않습니다. 테스트를 제외하고는 다른 곳에서 사용한 적이 없으므로 언급하지 않겠습니다. 여기서는 세 번째와 네 번째 사용법에 중점을 둡니다.
후자의 두 가지에 의해 생성된 함수는 익명 함수, 즉 세 번째 할당 방법으로 생성된 함수는 매우 유연하며 변수를 통해 전달될 수 있습니다. is_callable($func_name)을 사용하여 이 함수를 호출할 수 있는지 테스트하거나 $func_name($var)을 통해 직접 호출할 수 있습니다. 네 번째 방법으로 생성된 함수는 JS의 콜백 함수와 더 유사하며 그렇지 않습니다.
또 다른 특별한 소개는 함수를 정의할 때 상위 범위의 변수를 참조하는 데 사용할 수 있는 키워드입니다. function($arg) use($outside_arg) {function_statement} . 그 중 $outside_arg는 상위 스코프의 변수로 function_statement에서 사용할 수 있습니다.
이 사용법은 "매개변수 값의 개수가 결정됩니다"라는 콜백 함수에서 사용됩니다. 예를 들어 usort에서는 $callback의 매개변수 값이 두 개의 항목이어야 하지만 정렬에 영향을 주기 위해 다른 매개변수를 도입해야 하는 경우에는 어떻게 될까요? use() 키워드를 사용하면 내부 사용을 위해 $callback에 새 변수를 도입하는 것이 매우 편리합니다.
array_map/array_filter/array_walk:
이 세 함수의 실행 논리는 다음 코드와 유사하게 상대적으로 유사하므로 이 세 함수를 함께 사용하세요.
$result = []; foreach($vars as $key=>$val){ $item = callback(); $result[] = $item; } return $result; array_walk($vars, $callback)
콜백은 다음과 같아야 합니다.
$callback = function(&$val, $key[, $arg]){ doSomething($val); }
array_walk 실행 성공 여부를 Boolean 값으로 반환합니다. $value에 참조 기호를 추가하면 함수 내의 $value 값을 변경하여 $vars 배열을 변경하는 효과를 얻을 수 있습니다. $callback에는 두 개의 매개변수가 필요하므로 array_walk는 strtolower/array_filter와 같은 $callback을 전달할 수 없습니다. 비슷한 기능을 수행하려면 array_map()을 사용하여 다음에 설명할 수 있습니다.
array_walk_recursive($arr, $callback);
반환 값과 실행 메커니즘은 array_walk와 유사합니다.
콜백은 array_walk와 동일하지만 차이점은 $val이 배열인 경우 함수가 재귀적으로 처리한다는 것입니다. $val 하향 필수; 이 경우 $val은 배열의 $key이며 무시됩니다.
array_filter($vars, $callback, $flag);
its $callback은 다음과 유사합니다.
$callback = function($var){ return true or false; }
array_filter는 $callback이 실행될 때 false를 반환하는 항목을 필터링하고 array_filter는 필터링이 완료된 후 배열을 반환합니다.
세 번째 매개변수인 $flag는 콜백 매개변수인 $var의 값을 결정하지만, 이는 PHP 상위 버전의 기능일 수 있으며 직접 테스트할 수 있습니다. 기본적으로 배열에 있는 각 항목의 값이 전달됩니다. 플래그가 ARRAY_FILTER_USE_KEY이면 배열에 있는 각 항목의 키가 전달되고 ARRAY_FILTER_USE_BOTH는 키와 값에 전달됩니다.
array_map($callback, &$var_as [,$var_bs...]);
$callback은 다음과 유사합니다.
$callback = function($var_a[, $var_b...]){ doSomething($var_a, $var_b); }
콜백으로 처리된 $var_as 배열을 반환합니다(배열이 여러 개인 경우 원래 배열이 변경됨). 두 배열 중 동일한 순서의 항목이 처리를 위해 전달되며 실행 횟수는 매개변수 배열의 숫자가 됩니다.
usort/array_reduce
이 두 함수를 넣으세요. 실행 메커니즘이 다소 특별하기 때문에 함께 사용됩니다.
usort(&$vars, $callback)
$callback은 다음과 같아야 합니다.
callback = function($left, $right){ $res = compare($left, $right); return $res; }
usort는 실행 성공 여부를 부울 값으로 반환합니다. 사용자 정의 메서드는 $left와 $right를 비교합니다. 여기서 $left와 $right는 $vars의 두 항목입니다.
$left > $right는 양의 정수를 반환하고, $left
$vars中的元素会被取出会被由小到大升序排序。 想实现降序排列,将$callback的返回值反一下就行了。
array_reduce($vars ,$callable [, mixed $initial = NULL])
$callback应该如下:
$callback = function($initial, $var){ $initial = calculate($initail, $var); return $initial; }
初始值$initial默认为null,返回经过迭代后的initial;一定要将$initial返回,这样才能不停地改变$initial的值,实现迭代的效果。
这里顺便说一下map和reduce的不同:
map:将数组中的成员遍历处理,每次返回处理后的一个值,最后结果值为所有处理后值组成的多项数组;
reduce:遍历数组成员,每次使用数组成员结合初始值处理,并将初始值返回,即使用上一次执行的结果,配合下一次的输入继续产生结果,结果值为一项;
call_user_func/call_user_func_array
call_user_func[_array]($callback, $param)
$callback形如:
$callback = function($param){ $result = statement(); return $result; }
返回值多种,具体看$callback。
可用此函数实现PHP的事件机制,其实并不高深,在判断条件达成,或程序执行到某一步后 call_user_func()就OK了。这个我在之前的博客中也有介绍到:搭建自己的PHP框架心得(二)
总结
其实以上$callback不用单独定义并使用变量引用,使用上面说过的第四种函数定义方式,直接在函数内定义,使用‘完全’匿名函数就行了。 如:
usort($records, function mySortFunc($arg) use ($order){ func_statement; });
是不是逼格满满呢?
相关阅读:
PHP匿名函数和use子句用法实例,匿名use子句实例_PHP教程
위 내용은 PHP 콜백 함수 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

phpidifiesauser의 sssessionusessessioncookiesandssessionids.1) whensession_start () iscalled, phpgeneratesauniquessessionStoredInacookienamedPhpsSessIdonSeuser 'sbrowser.2) thisidallowsphptoretrievessessionDataTromServer.

PHP 세션의 보안은 다음 측정을 통해 달성 할 수 있습니다. 1. Session_REGENEREAT_ID ()를 사용하여 사용자가 로그인하거나 중요한 작업 일 때 세션 ID를 재생합니다. 2. HTTPS 프로토콜을 통해 전송 세션 ID를 암호화합니다. 3. 세션 _save_path ()를 사용하여 세션 데이터를 저장하고 권한을 올바르게 설정할 보안 디렉토리를 지정하십시오.

phpsessionfilesarestoredInTheRectorySpecifiedBysession.save_path, 일반적으로/tmponunix-likesystemsorc : \ windows \ temponwindows.tocustomizethis : 1) austession_save_path () toSetacustomDirectory, verlyTeCustory-swritation;

toretrievedatafromAphPsession, startSessionstart_start () andaccessvariblesinthe $ _sessionArray.forexample : 1) startthessession : session_start (). 2) retrievedata : $ _ session [ 'username']; echo "Welcome,". $ username;

세션을 사용하여 효율적인 쇼핑 카트 시스템을 구축하는 단계에는 다음이 포함됩니다. 1) 세션의 정의와 기능을 이해합니다. 세션은 요청에 따라 사용자 상태를 유지하는 데 사용되는 서버 측 스토리지 메커니즘입니다. 2) 쇼핑 카트에 제품 추가와 같은 기본 세션 관리를 구현합니다. 3) 제품 수량 관리 및 삭제 지원 고급 사용으로 확장; 4) 세션 데이터를 지속하고 보안 세션 식별자를 사용하여 성능 및 보안을 최적화합니다.

이 기사는 PHP의 인터페이스를 생성, 구현 및 사용하는 방법을 설명하여 코드 구성 및 유지 관리에 대한 이점에 중점을 둡니다.

이 기사에서는 PHP의 암호 해싱에 대한 Crypt ()와 Password_hash ()의 차이점에 대해 논의하여 최신 웹 애플리케이션에 대한 구현, 보안 및 적합성에 중점을 둡니다.

기사는 입력 유효성 검사, 출력 인코딩 및 OWASP ESAPI 및 HTML 청정기와 같은 도구를 통해 PHP의 크로스 사이트 스크립팅 (XSS) 방지에 대해 논의합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.
