//类A
class A {
//类A回调函数
public function callback($n){
//被回调后返回值
return $n+300;
}
//类A常规函数
public function func(){
//实例化类B,通过$this来传递类A,这里省去类A的new
$b=new B(array($this, "callback"));
//调用类B的常规函数进行回调
$b->call();
}
}
//类B
class B{
//类B私有变量,接收构造参数
private $arr;
//类B构造函数
public function __construct($arr){
//接收构造参数
$this->arr=$arr;
}
//类B常规函数发起回调
public function call(){
//发起回调并返回由A的callback返回的值
$ret=call_user_func($this->arr,"100");
echo $ret;
}
}
//实例化A类
$a = new A();
//调用A对象的常规方法func
$a->func();
//输出400
//类MyClass
class MyClass{
//根据函数名称回调,带参数
public function call($funcName,$str){
//回调函数名称由外部指定,并带参数
call_user_func(array($this,$funcName),$str);
}
public function funcA($str){
echo "funcA ".$str." \n";
}
public function funcB($str){
echo "funcB ".$str." \n";
}
}
$obj=new MyClass();
$obj->call('funcA',' 参数A');
$obj->call('funcB',' 参数B');
//输出:
//funcA 参数A
//funcB 参数B