* 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 '<hr>'; echo call_user_func(function($site){ return '欢迎来到'.$site; },'php中文网'); echo '<hr>';
//다중 매개변수, 실제 매개변수 수는 콜백 매개변수 수와 일치해야 하며, 초과하는 매개변수는 무시됩니다.
echo call_user_func(function($site,$course){ return '欢迎来到'.$site.'学习'.$course.'课程'; },'php中文网','php'); echo '<hr>'; //支持调用类中的方法做为回调 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,'sum'],10,15);
//php5.4+ 이상, 축약될 수 있습니다:
echo call_user_func([(new Demo1()),'sum'],10,15); echo '<hr>';
//정적 메서드 호출: 두 가지 방법이 있습니다: 문자열과 배열
//String : '클래스 이름::메서드 이름'
echo call_user_func('Demo2::multi',10,15);
//Array: [클래스 이름,'메서드 이름']
echo '<hr>'; echo call_user_func(['Demo2','multi'],20,5);
//네임스페이스가 있는 경우 클래스 이름 앞에 네임스페이스 문자열을 추가하거나 상수를 사용하세요. __NAMESPACE__
//call_user_func()를 이해하면 call_user_func_array()는 매우 간단합니다. 매개변수가 다릅니다
* 2. call_user_func_array(콜백, 배열)
* 두 개의 매개변수만 허용합니다: 콜백, 인덱스 배열, 전달된 모든 매개변수 콜백은 인덱스 배열
* 및 call_user_func(array, arg1.. .) 에 포함됩니다. 유일한 차이점은 매개변수 전달 방식입니다
* 콜백은 문자열 함수 이름, 클래스 이름, 배열, 익명 함수도 지원합니다
echo '<hr>'; echo call_user_func_array(function(){ //查看传递给回调的参数 // return print_r(func_get_args(),true); $msg = '前端开发的基础知识包括:'; //遍历参数数组 foreach (func_get_args() as $value) { $msg .= $value.','; } //去掉未尾逗号,并替换成感叹号 return rtrim($msg,',').'!'; }, ['html','css','javascript']); echo '<hr>'; class Demo3 { public function func1() { return __METHOD__.'<pre class="brush:php;toolbar:false">'.print_r(func_get_args(),true).''; } } class Demo4 { public static function func2() { return __METHOD__.'
'.print_r(func_get_args(),true).''; } }
//콜백 클래스의 메서드
echo call_user_func_array([(new Demo3),'func1'], ['php','java','c']);
//정적 메서드 호출을 위한 콜백:
//1. 배열 매개변수 메서드
echo call_user_func_array(['Demo4','func2'], ['html','css','jQuery']);
//2를 사용합니다. 문자열 매개변수 메서드
echo call_user_func_array('Demo4::func2', ['html','css','jQuery']);
//있는 경우. 네임스페이스입니다. 클래스 이름 앞에 네임스페이스나 __NAMESPACE__를 추가하세요
위 내용은 PHP의 콜백 함수의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!