<?php
/**
* 回调函数:
* 指调用函数时并不是传递一个标准的变量作为参数,而是将另一个函数作为参数传递到调用的函数中
* 使用回调函数可以 将一段自己定义的功能传到函数内部使用
* 1. 变量函数(可变函数)
* 变量后面有圆括号,PHP将寻找与变量的值同名的函数,并尝试执行
*/
// 变量函数
function one(){
echo 'one';
}
function two(){
echo 'two';
}
function say($words){
echo $words;
}
$a = 'one';
$a();
echo '<hr>';
$a = 'two';
$a();
echo '<hr>';
/**
* 借助变量函数,声明一个回调函数
* @param callback $func 传递一个函数名称字符串作为参数
*/
function whattodo($func){
$func();
}
whattodo('one');
echo '<hr>';
/**
* 借助call_user_func_array(callable $callback , array $param_arr ),自定义回调函数
* 调用回调函数,并把一个数组参数作为回调函数的参数
*/
function whattodo2(){
call_user_func_array('say',array('hello word'));
}
whattodo2();
echo '<hr>';
/**
* 借助call_user_func(callable $callback [, mixed $parameter [, mixed $... ]]),自定义回调函数
* 把第一个参数作为回调函数调用
*/
function whattodo3(){
call_user_func('say','hello word!');
}
whattodo3();
echo '<hr>';
/**
* 类中静态函数和对象的方法回调:
* 回调类中的成员犯法:第一个参数必须使用数组,并且指定两个元素
*/
class Demo{
static function eat($food){
echo $food;
}
}
// 类名称字符串
call_user_func_array(array("Demo","eat"),array('rice'));
call_user_func_array("Demo::eat", array('rice'));
echo '<hr>';
class Demo2{
function play($play){
echo $play;
}
}
$obj = new Demo2();
// 对象引用
call_user_func_array(array($obj,"play"),array('play games'));
call_user_func_array(array(new Demo2(),"play"),array('play games'));