>  기사  >  백엔드 개발  >  PHP의 콜백 함수

PHP의 콜백 함수

无忌哥哥
无忌哥哥원래의
2018-06-28 14:49:158784검색

* 2. 콜백을 실행하는 2가지 함수

* 팁: 콜백이란 무엇인가요?

* 직접 호출이라는 PHP 시스템에서 제공하는 함수를 호출합니다. 직접 호출이라고도 합니다.

* PHP 시스템은 사용자 정의 호출 함수, 콜백이라고도 불리는 간접 호출이라는 프록시 함수를 통해 호출해야 합니다

* 오늘 배운 call_user_func() 및 call_user_func_array()가 그러한 프록시 함수입니다

* 시스템 대신 사용자 정의 함수를 호출할 수 있습니다

* 1.call_user_func_array($callback, $array): 배열 매개변수를 사용하여 콜백 함수 실행

* 2.call_user_func($callback, $array): 첫 번째 매개변수는 콜백 함수 호출로 사용

* 참고: 1. 일반적으로 콜백에서는 매개변수를 작성할 필요가 없지만 다른 함수를 통해 매개변수를 얻습니다. 2. 매개변수는 참조로 전달될 수 없습니다

//1. 매개변수는 call_user_func()를 사용하여 하나씩 전달됩니다.

//단일 매개변수

echo call_user_func(function(){
    //如果匿名回调没写参数,可以通过func_get_args()获取
    return '欢迎来到'.func_get_arg(0);
},'php中文网');
echo &#39;<hr>&#39;;
echo call_user_func(function($site){
    return &#39;欢迎来到&#39;.$site;
},&#39;php中文网&#39;);
echo &#39;<hr>&#39;;

//다중 매개변수, 실제 매개변수 수는 콜백 매개변수 수와 일치해야 하며, 초과하는 매개변수는 무시됩니다.

echo call_user_func(function($site,$course){
    return &#39;欢迎来到&#39;.$site.&#39;学习&#39;.$course.&#39;课程&#39;;
},&#39;php中文网&#39;,&#39;php&#39;);
echo &#39;<hr>&#39;;
//支持调用类中的方法做为回调
class Demo1
{
    //普通方法
    public function sum($a, $b)
    {
        return $a+$b;
    }
}
class Demo2
{
    //静态方法
    public static function multi($a,$b)
    {
        return $a*$b;
    }
}

//일반 메소드 호출: 콜백이 전달되어야 합니다. 배열로: [객체, '메서드 이름']

$obj = new Demo1;
echo call_user_func([$obj,&#39;sum&#39;],10,15);

//php5.4+ 이상, 축약될 수 있습니다:

echo call_user_func([(new Demo1()),&#39;sum&#39;],10,15);
echo &#39;<hr>&#39;;

//정적 메서드 호출: 두 가지 방법이 있습니다: 문자열과 배열

//String : '클래스 이름::메서드 이름'

echo call_user_func(&#39;Demo2::multi&#39;,10,15);

//Array: [클래스 이름,'메서드 이름']

echo &#39;<hr>&#39;;
echo call_user_func([&#39;Demo2&#39;,&#39;multi&#39;],20,5);

//네임스페이스가 있는 경우 클래스 이름 앞에 네임스페이스 문자열을 추가하거나 상수를 사용하세요. __NAMESPACE__

//call_user_func()를 이해하면 call_user_func_array()는 매우 간단합니다. 매개변수가 다릅니다

* 2. call_user_func_array(콜백, 배열)

* 두 개의 매개변수만 허용합니다: 콜백, 인덱스 배열, 전달된 모든 매개변수 콜백은 인덱스 배열

* 및 call_user_func(array, arg1.. .) 에 포함됩니다. 유일한 차이점은 매개변수 전달 방식입니다

* 콜백은 문자열 함수 이름, 클래스 이름, 배열, 익명 함수도 지원합니다

echo &#39;<hr>&#39;;
echo call_user_func_array(function(){
    //查看传递给回调的参数
//    return print_r(func_get_args(),true);
    
    $msg = &#39;前端开发的基础知识包括:&#39;;
    //遍历参数数组
    foreach (func_get_args() as $value) {
        $msg .= $value.&#39;,&#39;;
    }
    //去掉未尾逗号,并替换成感叹号
    return rtrim($msg,&#39;,&#39;).&#39;!&#39;;
    
}, [&#39;html&#39;,&#39;css&#39;,&#39;javascript&#39;]);
echo &#39;<hr>&#39;;
class Demo3
{
    public function func1()
    {
        return __METHOD__.&#39;<pre class="brush:php;toolbar:false">&#39;.print_r(func_get_args(),true).&#39;
'; } } class Demo4 { public static function func2() { return __METHOD__.'
&#39;.print_r(func_get_args(),true).&#39;
'; } }

//콜백 클래스의 메서드

echo call_user_func_array([(new Demo3),&#39;func1&#39;], [&#39;php&#39;,&#39;java&#39;,&#39;c&#39;]);

//정적 메서드 호출을 위한 콜백:

//1. 배열 매개변수 메서드

echo call_user_func_array([&#39;Demo4&#39;,&#39;func2&#39;], [&#39;html&#39;,&#39;css&#39;,&#39;jQuery&#39;]);

//2를 사용합니다. 문자열 매개변수 메서드

echo call_user_func_array(&#39;Demo4::func2&#39;, [&#39;html&#39;,&#39;css&#39;,&#39;jQuery&#39;]);

//있는 경우. 네임스페이스입니다. 클래스 이름 앞에 네임스페이스나 __NAMESPACE__를 추가하세요

위 내용은 PHP의 콜백 함수의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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