批改状态:合格
老师批语:总结要自己写!请认真对待!
使用function 申明:例如:function 函数名称(参数){具体执行的函数体;}
小写字母/数字或下线且不允许使用数字开头,并且命名的时候最好是有一定意义。
function get_user_name(int $user_id){}function get_password(int $user_id){}function error_msg(string $str){}
//函数声明:求两个参数的和function sum(float $x,float $y) :float{return $x + $y;}//调用echo sum(10,10);//输出:20
系统函数:系统给我们提供了若干函数// 1、所有的字符都转小写(针对英文字母)echo strtolower('ABCDEFG');// 2、字符串分割数组,语法:str_split(字符串,数组元素的长度)print_r(str_split("aaabbbccc",3));// 3、四舍五入echo round(3.5);
//函数声明:求两个参数的和function sum(float $x,float $y) :float{return $x + $y;}// 1、定义值为函数名称的变量$sum2='sum';// 2、使用可变变量输出函数echo $sum2(10,10);echo '<br>';// 使用函数输出结果相同echo sum(10,10);
//将一个没有函数名的函数赋值给一个变量$sum = function(float $x,float $y) :float{return $x + $y;};echo $sum(10,10);闭包可以从父作用域中继承变量$msg = 'hello';// 使用use()继承$msg变量$msg_str = function () use ($msg) {return $msg;};echo $msg_str();
函数必须要有返回值,正常情况下只能返回单一的值(如不能同时输出两个变量),可以通过以下方式返回不同类型的值:
function demo(): string{$status = 1;$msg= '成功';return $status . $msg;}echo demo();//输出:1成功//通过数组返回function demo(): array{$user_id =1;$user_name='张三';return ['id' => $user_id, 'name' => $user_name];}print_r(demo());// 输出:// Array// (// [id] => 1// [name] => 张三// )//通过json返回字符串function demo(): string{$user_id =1;$user_name='张三';return json_encode(['id' => $user_id, 'name' => $user_name]);}echo demo();// 输出:{"id":1,"name":"\u5f20\u4e09"}//也可以使用json_decode()转回数组;(不加第二个参数默认转换为对象)print_r(json_decode( demo(), true));//通过序列化方式返回字符串function demo(): string{$user_id =1;$user_name='张三';return serialize(['id' => $user_id, 'name' => $user_name]);}echo demo();// 输出:a:2:{s:2:"id";i:1;s:4:"name";s:6:"张三";}//a表示数组,2个元素,//第1个元素键名为id为string类型,长度是2,值为int类型,长度是1//第2个元素键名为name为string类型,长度是4,值为string类型,长度是6// 反序列化: 还原print_r(unserialize( demo()));
普通参数
//函数声明:求两个参数的和function sum(float $x,float $y) :float{return $x + $y;}//调用echo sum(10,10);//输出:20//指定了两个float类型参数x,y,未指定默认值//默认值参数//函数声明:求两个参数的和function sum(float $x,float $y=10) :float{return $x + $y;}//调用echo sum(5);//输出:15//指定了两个float类型参数x,y,其中y指定了默认值10;//凡是有默认值的参数,必须写到没有默认值参数的后面//注意 引用参数,要在参数前添加取地址符&function sum(float &$y) :float{return $y*=2;}$p=5;//在函数参数中引用变量$pecho sum($p);//函数内部对参数的更新会实时映射到外部实际参数$pecho $p;//简单理解就是同步更新引用变量//剩余参数// 例如:一个数量不固定的数求和,参数前面加...function demo(...$num){//array_sum为数组求和函数return array_sum($num);}// 定义数组$arr = [2,2,2,2,2];// 无论数组有多少个,全部进行计算$num_sum = demo(...$arr);echo $num_sum;
函数在同一空间中,同样不允许有多个同名函数,就等同于一个文件夹里不允许有两个相同文件。(如一个文件夹里不能同时有两个11.txt)解决命名冲突:使用命名空间
// 函数的命名空间namespace ns1 {function demo(){return '我是ns1的DEMO';}}namespace ns2 {function demo(){return '我是ns2的DEMO';}}// 全局空间: 匿名空间,默认空间namespace {function demo(){}echo ns1\demo();}
函数的使用前期自学基本使用没有问题,通过学习,有了更系统的理解;对于回调函数,异步编程中的函数的参数还不能完全理解。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号