글로벌 콜백 함수:
여기서 글로벌 함수는 함수를 사용하여 직접 정의한 함수를 의미하며 어떤 객체나 클래스에도 포함되지 않습니다. 아래 예를 참조하십시오.
샘플 코드:
function fnCallBack( $msg1 , $msg2 ) { echo 'msg1:'.$msg1; echo "<br />n"; echo 'msg2:'.$msg2; } $fnName = "fnCallBack"; $params = array( 'hello' , 'world' ); call_user_func_array( $fnName , $params );
코드 설명:
여기서는 PHP 내장 함수 call_user_func_array를 사용하여 호출합니다. call_user_func_array에는 두 개의 매개변수가 있습니다. 첫 번째 매개변수는 호출할 함수의 이름을 나타내는 string입니다. 두 번째 매개변수는 호출할 함수에 순서대로 전달되는 매개변수 목록을 나타내는 배열입니다. .
효과는 다음과 같습니다.
클래스의 정적 메서드 콜백:
콜백하려는 메서드가 클래스의 정적 메서드인 경우 어떻게 해야 하나요? PHP에 내장된 call_user_func_array 메소드를 사용하여 호출할 수 있습니다. 예를 참조하세요.
class MyClass { public static function fnCallBack( $msg1 , $msg2 ) { echo 'msg1:'.$msg1; echo "<br />n"; echo 'msg2:'.$msg2; } } $className = 'MyClass'; $fnName = "fnCallBack"; $params = array( 'hello' , 'world' ); call_user_func_array( array( $className , $fnName ) , $params );
코드 설명:
이 코드는 첫 번째 메소드의 코드와 매우 유사합니다. call_user_func_array의 세 번째 요소입니다. 하나의 매개변수를 전달하면 클래스의 정적 메소드에 대한 콜백을 구현할 수 있습니다. 이때 call_user_func_array의 첫 번째 매개변수는 배열입니다. 배열의 첫 번째 요소는 클래스 이름이고 두 번째 요소는 호출할 함수 이름입니다.
첫 번째) 메소드의 결과는 같습니다^_^)계속 공부하세요
이 메소드를 사용하여 클래스의 비정적 메소드를 호출(즉, 정적을 제거)하면 결과는 어떻게 될까요? 아래 코드를 봐주세요
class MyClass { public function fnCallBack( $msg1 , $msg2 ) { echo 'msg1:'.$msg1; echo "<br />n"; echo 'msg2:'.$msg2; } } $className = 'MyClass'; $fnName = "fnCallBack"; $params = array( 'hello' , 'world' ); call_user_func_array( array( $className , $fnName ) , $params );
我先用最原始的字符串形式的调用方法尝试了一下,如下所示:
class MyClass { private $name = 'abc'; public function fnCallBack( $msg1 = 'default msg1' , $msg2 = 'default msg2' ) { echo 'object name:'.$this->name; echo "<br />n"; echo 'msg1:'.$msg1; echo "<br />n"; echo 'msg2:'.$msg2; } } $myobj = new MyClass(); $fnName = "fnCallBack"; $params = array( 'hello' , 'world' ); $myobj->$fnName();
成功了,输出结果
调用是成功了,不过如何把参数params传给这个方法呢,如果把params直接传进去,那么它会作为1个参数,怎么把params拆开来传进去呢?
查了下PHP手册,找到了create_function函数,这个方法可以用字符串来创建一个匿名函数,好,有思路了,可以创建一个匿名的函数,在这个匿名函数中,调用我们的回调函数,并把参数传进去。
class MyClass { private $name = 'abc'; public function fnCallBack( $msg1 = 'default msg1' , $msg2 = 'default msg2' ) { echo 'object name:'.$this->name; echo "<br />n"; echo 'msg1:'.$msg1; echo "<br />n"; echo 'msg2:'.$msg2; } } $myobj = new MyClass(); $fnName = "fnCallBack"; $params = array( 'hello' , 'world' ); $strParams = ''; $strCode = 'global $myobj;global $fnName;global $params;$myobj->$fnName('; for ( $i = 0 ; $i < count( $params ) ; $i ++ ) { $strParams .= ( '$params['.$i.']' ); if ( $i != count( $params )-1 ) { $strParams .= ','; } } $strCode = $strCode.$strParams.");"; $anonymous = create_function( '' , $strCode); $anonymous();
위 내용은 PHP 콜백 기능을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!