批改状态:合格
老师批语:
function 函数名称(类型限定 参数列表) : 返回值类型
{
// 函数体
return 返回值;
// 没有return 返回null
}
<?phpfunction myfunc(float $a,int $b):float{return $a+$b;}echo myfunc(1,2);
命名函数
自动提升,在全局任何地方都可以调用
<?php// 函数提升echo myfunc();echo '<br>';function myfunc(){return 'hello';}echo myfunc();匿名函数
<?php$myfunc = function (){return 'hello';};echo $myfunc();
<?php// 必选参数function myfunc(string $name): string{// return返回值是文本必选是双括号return "hello $name";};echo myfunc('天蓬老师');
可选参数
<?phpfunction demo2(string $name = 'php.cn'): string{return "Hello $name !";}echo demo2(), '<br>';echo demo2('php中文网'), '<hr>';
$args剩余参数语法,组合成数组
<?php// ...$args剩余参数语法,组合成数组function myfunc(...$args){print_r($args);};myfunc(1,2,3);
$args的在数据库实际应用
<?phpfunction connect(...$args){// print_r($args);return new PDO($args[0], $args[1], $args[2]);}// 数据库暂未学习,大家先体会一下$pdo = connect('mysql:dbname=mysql','root','root');if ($pdo) echo '<h3>连接成功</h3>';ob_clean();
php支持“值传递”和“引用传递”
引用传参在参数前使用: &
<?php// 4. 引用参数// js函数参数只支持值传递// php支持“值传递”和“引用传递”// 默认就是值传递,上面全是// 引用传参: 在函数内部对参数的任何更新都会实现映射到外部的参数中$name = '天蓬老师';// 引用传参在参数前使用: &function demo6(string &$name){$name = '灭绝老师';}echo "$name";demo6($name);echo '<br>';echo "$name ";`
php多值返回
数组
<?phpfunction myfunc(): array{// return返回值是文本必选是双括号return ['status' => 1, 'message' => '验证成功'];};print_r( myfunc());
php在数据库中前后端验证用法
<?phpfunction myfunc(): array{return ['status' => 1, 'message' => '验证成功'];};// print_r( myfunc());echo '<br>';$res=myfunc();echo $res['status']=== 1 ? $res['message']:'验证失败';
php多值返回
类
<?phpfunction myfunc(): object{return new class(){public $name = 'admin';public $email = 'admin@php.cn';};}$user=myfunc();printf('name = %s<br>email = %s<hr>', $user->name, $user->email);
php多值返回
序列化字符串
<?php// 3.1 php内置的序列化函数// 如果有一些数据需要进行网络传输或保存到文件或数据表中的时候要用到它// 如果这个序列化的数据只在php程序中使用,应该使用php内置的方法就可以了function demo3(): string{// serialize序列化函数return serialize(['status' => 1, 'message' => '验证成功']);}$str = demo3();echo $str;// file_put_contents('file.txt', $str);// 在php中使用时要还原成原来的类型$arr = unserialize($str);var_dump($arr);echo '<hr>';
php多值返回
json
<?php// 3.2 转为通用的json格式的字符串// 这样就可以与其它编程语言进行数据交换,例如与前端js,java,python...function demo4(): string{return json_encode(['status' => 1, 'message' => '验证成功'], JSON_UNESCAPED_UNICODE);}$str = demo4();echo $str;echo '<br>';#对象形式参看老师案例#以下是数组形式// 给 json_decode()传入第二个参数 : true$res=json_decode($str, true);var_dump($res);echo '<br>';printf('status = %d, message = %s<hr>',$res['status'], $res['message']);print_r($res);
<?php#全局成员$name = 'chen';$email = '123456';function myfun(): string{$message = '';// 在函数内部声明为globalglobal $name;$message .= $name.'<br>';// 以子典形式取值$message .=$GLOBALS['email'];return $message;}echo myfun();
<?phpfunction myfun(): string{$message = 'chen';return $message;}echo myfun();
<?php$name = 'chen';$email = '123456';function myfun(): string{$message = '';// 在函数内部声明为globalglobal $name;$message .= $name.'<br>';// 以子典形式取值$message .=$GLOBALS['email'];return $message;};echo myfun();
<?php$name = 'chen';$email = '123456';$myfun=function () use($name, $email){return sprintf($name,$email);};echo $myfun();
闭包引用传参
<?php$name = 'chen';$email = '123456';// 引用传参&$myfun=function ($myname) use(&$name){$name=$myname;};$myfun('张');echo $name;
闭包使用用柯里化
嵌套函数,再柯里化
<?phpfunction demo4($site){// 返回一个函数,闭包最佳使用场景return function ($color) use ($site) {return sprintf('<h3 style="color:%s">%s</h3>', $color, $site);};}// var_dump( demo4('php中文网'));// $closure = demo4('php中文网');// echo $closure('red');// 高阶函数: 柯里化echo demo4('php中文网')('red');
<?phpfunction myfun(string $name): string{return "$name";};// 传统访问echo myfun('chen');echo '<hr>';// 异步执行// call_user_func('函数','参数列表')echo call_user_func('myfun','liu') ,'<hr>';// call_user_func_array(函数,[参数数组])echo call_user_func_array('myfun',['wang']);
<?php// 这二个函数还可以异步的调用对象方法class User{// 实例方法public function hello(string $name) : string{return "Hello $name !";}// 静态方法: 类调用public static function say(string $site) : string{return "欢迎来到 $site !";}}// 实例方法$res = call_user_func_array([new User, 'hello'], ['朱老师']);echo $res,'<br>';// 静态方法// $res = call_user_func_array(['User', 'say'], ['php中文网']);$res = call_user_func_array('User::say', ['php中文网']);echo $res,'<br>';
<?php// 静态变量function demo1(){// 函数中的静态变量不会随函数调用结束而消失// 他会自动进入到下一次的函数调用中// 可以实现在函数的多次调用过程中:共享数据 / 数据通信static $i = 1;echo $i,'<br>';$i++;}// echo $i;echo demo1();echo demo1();echo demo1();echo demo1();echo demo1();
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号