批改状态:合格
老师批语:
function 函数名称(类型限定 参数列表):返回类型{//函数体return 返回值}
function demo(){return 'php';}echo demo() . '<br>';

$php = function () {return 'php';};echo $php() . '<br>';

function hello(string $name): string{return 'hello' . $name;}echo hello('admin'), '<br>';echo hello(123), '<br>';echo hello(true), '<br>';

function hello1(string $name = 'admin'): string{return 'hello' . $name;}echo hello1('user'), '<br>';echo hello1(), '<br>';

function args(){$n = func_num_args();$args = implode(',', func_get_args());$arg = func_get_arg(1);printf('参数数量=%d 参数=%s,第二个参数:%s', $n, $args, $arg);//求和echo '参数之和' . array_sum(func_get_args());}args(1, 2, 4, 5);

function args2(...$args){print_r(($args));$n = count($args);$argss = implode(',', $args);$arg = $args[1];printf('参数数量=%d 参数=%s,第二个参数:%s', $n, $argss, $arg);echo '参数之和' . array_sum($args);}args2(1, 2, 3, 4);

$name = 'admin';function demo5(&$name){$name = 'user';}echo "\$name=" . $name;demo5($name);echo "\$name=" . $name;

function ok(): array{return ['code' => 1, 'msg' => 'ok'];}var_dump(ok());

function user(){return new class(){public $name = 'admin';public $email = 'admin@admin.com';};}$user = user();var_dump($user);printf('name=%s<br> email=%s <br>', $user->name, $user->email);

function xu(): string{return serialize(['code' => 1, 'msg' => 'ok']);}echo xu();

$arr = unserialize(xu());
var_dump($arr);
function demo6(): string{return json_encode(['code' => 1, 'msg' => 'ok']);}var_dump(demo6());

$data = json_decode(demo6());var_dump($data);
printf('status=%s,message=%s', $data->code, $data->msg);
$arrTmp = json_decode(demo6(), true);
var_dump($arrTmp);
echo demoo();
###闭包函数:匿名函数,可以访问函数外部的自由变量/父作用域中的变量```html$user11=function() use($name,$email){printf('name=%s,email=%s', $name, $email);};echo $user11() . '<br>';//闭包支持引用传参printf('现在的:name=%s,email=%s', $name, $email);$user12=function($newname,$newemail) use(&$name,&$email){$name=$newname;$email=$newemail;};echo $user12('user','user@admin.com') . '<br>';printf('改变后的:name=%s,email=%s', $name, $email);

ps: use禁止使用以下三种参数
- 超全局不让用:$_GET;- $this- 与当前参数重名不让用
闭包经常用作函数的返回值
function demo7($site){return function($color) use ($site){return sprintf('<h2 style="color:%s">%s</h2>',$color,$site);};}// $closure=demo7('站点');// echo $closure('red');//柯里化echo demo7('站点')('red');

php是单线程,同步执行时如果遇到耗时函数会发生阻塞,应该将它改为异步回调执行
call_user_func(函数,函数列表);
call_user_func_array(函数,[参数数组])
function demo8(string $name):string{return $name;}echo call_user_func('demo8','admin'),'<br>';echo call_user_func_array('demo8',['admin']);

函数中的静态变量不会随函数调用结束而消失,它会自动进入到下一次的函数调用中,可以实现在函数的多次调用过程中:共享数据/数据通信
function demo9(){static $i=1;echo $i,'<br>';$i++;}echo demo9();echo demo9();echo demo9();echo demo9();

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