批改状态:合格
老师批语:
- 实例演示函数作用域与闭包,回调的使用场景与参数调用;
- 实例演示函数的多值返回类型方式,重点是json
// 实例演示函数作用域与闭包// 函数内部访问外部变量$a = 1;$b = 2;$c = 3;// global 访问外部变量function fa() {global $a;return $a;}// 显示 1echo fa(), '<br>';// 全局变量 $GLOBALS 访问function foo() {return $GLOBALS['b'];}// 显示 2echo foo(), '<br>';// 匿名函数闭包 closure 访问$par = function() use( $c ) {return $c;};// 显示 3echo $par(), '<br>';// 函数内使用 closure 闭包function par($a, $b) {$sum = function($sum) use ($a, $b) {return "$sum = $a + $b = ". ($a + $b);};return $sum;}// 显示 sum = 1 + 2 = 3echo par($a, $b)('sum'), '<br>';echo '<br>';

// 函数回调的参数调用function cb($a, $b, $c) {return "$a + $b = $c : ". var_export($a + $b === $c, true);}// 传入参数列表// 显示 1 + 2 = 3 : trueecho call_user_func('cb', 1, 2, 3), '<br>';// 传入数组参数// 显示 2 + 3 = 4 : falseecho call_user_func_array('cb', [2, 3, 4]), '<br>';echo '<br>';// 对象回调的参数调用class Obj {// 静态方法public static function fa($a) {return "fa: $a";}// 公开方法public function foo($b) {return "foo: $b";}}// 类的实例化$obj = new Obj();// 传入参数列表// 访问静态方法 fa// fa: 1echo call_user_func([$obj, 'fa'], 1), '<br>';// fa: 2echo call_user_func(['Obj', 'fa'], 2), '<br>';// fa: 3echo call_user_func('Obj::fa', 3), '<br>';echo '<br>';// 访问公开方法 foo// foo: 4echo call_user_func([$obj, 'foo'], 4), '<br>';echo '<br>';// 传入参数数组// 访问静态方法 fa// fa: 1echo call_user_func_array([$obj, 'fa'], [1]), '<br>';// fa: 2echo call_user_func_array(['Obj', 'fa'], [2]), '<br>';// fa: 3echo call_user_func_array('Obj::fa', [3]), '<br>';echo '<br>';// 访问公开方法 foo// foo: 4echo call_user_func_array([$obj, 'foo'], [4]), '<br>';echo '<br>';

// 函数的多值返回function multi(...$args) {if (!empty($args)) {if (!is_string($args[0])) return $args[0];$type = $args[0];$prams = array_slice($args, 1);switch ($type) {case 'serialize':return serialize($prams);case 'json_encode':return json_encode($prams);case 'object' :return (object)$prams;default:return $prams;}}return $args;}// 返回数组print_r(multi('array', 1, 2, 3));echo '<br>';// 返回对象print_r(multi('object', 1, 2, 3));echo '<br>';// 返回序列化print_r(multi('serialize', 1, 2, 3));echo '<br>';// json_encodeprint_r(multi('json_encode', 1, 2, 3));echo '<br>';

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号