매뉴얼은 전통적으로하지만, 상호 교환 "콜백"을 "호출" "콜백"및 용어를 사용 : 함수가있는 경우 예를 들어, 특정 기능의 경우, 당신은 확인하고보고 싶은 것 는 나중에 호출 할 함수 또는 클래스 메소드를 참조하는 function pointer과 같은 역할을하는 문자열 또는 배열 값을 나타냅니다. 이는 맛은 PHP 4 이후로 함수형 프로그래밍의 일부 요소를 허용했다 :
$cb1 = 'someGlobalFunction';
$cb2 = ['ClassName', 'someStaticMethod'];
$cb3 = [$object, 'somePublicMethod'];
// this syntax is callable since PHP 5.2.3 but a string containing it
// cannot be called directly
$cb2 = 'ClassName::someStaticMethod';
$cb2(); // fatal error
// legacy syntax for PHP 4
$cb3 = array(&$object, 'somePublicMethod');
이 일반적으로 호출 값을 사용하는 안전한 방법입니다
if (is_callable($cb2)) {
// Autoloading will be invoked to load the class "ClassName" if it's not
// yet defined, and PHP will check that the class has a method
// "someStaticMethod". Note that is_callable() will NOT verify that the
// method can safely be executed in static context.
$returnValue = call_user_func($cb2, $arg1, $arg2);
}
현대 PHP 버전이 허용하는 최초의 세 가지 형식 위의 코드는 직접 $cb()
으로 호출됩니다. call_user_func
및 call_user_func_array
은 위의 모든 것을 지원합니다.
참조 : http://php.net/manual/en/language.types.callable.php
주 /주의 사항 :
- 함수/클래스 네임 스페이스되면, 문자열이 완전한 이름을 포함해야합니다. 예 :
['Vendor\Package\Foo', 'method']
call_user_func
은 비 객체를 참조로 전달할 수 없으므로 call_user_func_array
을 사용하거나 PHP 버전 이후에서는 콜백을 var에 저장하고 직접 구문을 사용합니다. $cb()
;
__invoke()
메서드가있는 개체 (익명 기능 포함)는 "호출 가능"카테고리에 속하며 동일한 방식으로 사용할 수 있지만 이러한 콜백은 기존의 "콜백"용어와 직접 연관되지 않습니다.
- 레거시
create_function()
은 전역 함수를 만들고 이름을 반환합니다. eval()
에 대한 래퍼이며 익명의 함수를 대신 사용해야합니다.
이 "질문"은 더 자세하게 사용할 수 있습니다. 유용한 답변, 그래도! – rinogo