Blogger Information
Blog 17
fans 0
comment 0
visits 19009
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP的函数类型、函数返回值、函数中的参数&回调函数的使用及函数的命名空间
嘬一口啊
Original
860 people have browsed it

php的函数

  • 函数的声明

  1. function 函数名(参数列表) {
  2. 函数体;由一条或多条语句组成,也可以为空
  3. }
  4. // 调用函数
  5. 函数名();
  6. 例:
  7. // 括号中的int是规定参数类型必须是整数型,:int是规定返回值必须是整数型
  8. function demo(int $a,int $b):int{
  9. // 将函数的执行结果返回到调用者
  10. return $a + $b;
  11. }
  12. // 调用函数
  13. // 按名称调用
  14. // 参数类型限制就是变量类型强制转换,把传递的参数转为整数型数值,如参数中有不可转为整数型数值的参数直接报错
  15. // 返回值类型限制相同
  16. echo demo(1,7); // 输出结果 8;
  1. 系统小函数:count():返回数组中元素的数目[就是数数组中的元素个数]
  2. 例:
  3. echo count([1,2,3]); // 输出 3;
  • 函数的类型

1.自定义函数
  1. 例:
  2. // $price价钱 $discount:折扣
  3. function TOTAL_PRICE(float $price,float $discount):float {
  4. return $price *= $discount; // 等同于$price = $price * $discount;
  5. }
  6. echo '实付钱='.TOTAL_PRICE(3000,0.8); // 输出 24000;
2.系统函数(很多可自行查阅手册,下方只是一个小例字)
  1. // 系统函数字符串截取函数mb_substr(截取变量名,截取开始数值,截取结束数值);
  2. $str = "函数调用机制,改进函数调用机制,通过优化参数传递环节,减少了一些指令";
  3. echo mb_substr($str,0,6); // 输出"函数调用机制"
3.可变函数
  1. // 将函数名作为变量值,通过变量名实现调用函数
  2. 例:
  3. // $price价钱 $discount:折扣
  4. function TOTAL_PRICE(float $price,float $discount):float {
  5. return $price *= $discount; // 等同于$price = $price * $discount;
  6. }
  7. // $demo的值就是函数名可以直接通过这个变量值来调用TOTAL_PRICE这个函数
  8. $demo = 'TOTAL_PRICE';
  9. echo '实付金额='.$demo(1000,0.5),'<br>'; // 输出 5000;
4.匿名函数
  1. // 拥有名称的函数叫做命名函数/或具名函数
  2. // 顾名思义无名称的函数就叫匿名函数
  3. // 匿名函数用个变量来承接
  4. // 注意匿名函数的结尾括号后面有个分号
  5. $变量名 = function (参数列表) {
  6. 函数体;
  7. }
  8. 例:
  9. $get = function (float $price,float $discount):float {
  10. return $price *= $discount;
  11. };
  12. echo '实付金额='.$get(500,0.9); // 输出 450;
5.匿名函数访问父作用域中的变量
  1. 例:
  2. // 这个父作用域是全局作用域
  3. $discount = 0.5;
  4. $pay = function (float $price,float $number)use($discount):float {
  5. // 总价
  6. $total_price = $price * $number;
  7. // 使用三元运算根据总价钱判断打折
  8. return $total_price > 2000 ? $total_price *= $discount : $total_price;
  9. };
  10. // 调用匿名函数
  11. echo '实付金额='.$pay(600,3); // 输出 "1800" 总价钱不够打折
  12. 例:
  13. // 父作用域是父函数
  14. $f = function($discount){
  15. $pay = function (float $price,int $number)use($discount):float {
  16. // 总价
  17. $total_price = $price * $number;
  18. // echo $total_price;
  19. // 使用三元运算根据总价钱判断打折
  20. return $total_price > 2000 ? $total_price *= $discount : $total_price;
  21. };
  22. // 将子函数以返回值得方式返给调用者
  23. return $pay;
  24. };
  25. echo '实际支付金额='.$f(0.5)(1000,5); // 输出 "2500"
  26. 理解$f(0.5)(1000,5):$f(0.5); $pay(1000,5);

函数的返回值

函数只能返回单一的值

1.多值通过字符串拼装返回
  1. 例:
  2. function demo1():string {
  3. $success = 1;
  4. $defeated = '失败';
  5. return $success.'<span style="color:blue">'.$defeated.'</span>';
  6. }
  7. echo demo1(); // 输出结果 1失败[这个失败是有蓝色字体样式的]
2.多值通过数组返回给调用者
  1. 例:
  2. function demo2():array {
  3. $success = 1;
  4. $defeated = '失败';
  5. return ['success'=>$success,'defeated'=>$defeated];
  6. }
  7. // 通过关联数组的键值来调用输出指定数组元素
  8. echo demo2()['success']; // 输出1 success的值就是1
3.通过json来返回值

json_encode(数组); 将数组已字符串的形式返回

json_decode(); 将对JSON格式的字符串转为数组格式

  1. 例:
  2. function demo3():string{
  3. $success = 1;
  4. $defeated = '失败';
  5. // json_encode(数组); 将数组已字符串的形式返回
  6. return json_encode(['success'=>$success,'defeated'=>$defeated]);
  7. }
  8. echo demo3(); // 输出 {"success":1,"defeated":"\u5931\u8d25"}
  9. 解释:输出中的\u5931\u8d25就是失败两个字
  10. // 输出查看当前函数值的输出类型
  11. echo gettype(demo3()),'<hr>'; // 输出 string 字符串型
  12. // 将对JSON格式的字符串转为数组格式
  13. print_r(json_decode(demo3(),true));
4.序列化方式

serialize(要序列化的数组名称) 用于序列化对象或数组,并返回一个字符串

反序列化: 还原[将被序列化成字符串格式的对象或数组,还原为数组格式]

unserialize(被序列化成字符串格式的对象或数组)

  1. 例:
  2. function demo4():string {
  3. $success = 1;
  4. $defeated = '失败';
  5. return serialize(['success'=>$success,'defeated'=>$defeated]);
  6. }
  7. echo demo4(); // 输出 "1失败" 字符串类型
  8. echo gettype(demo4()); // 输出查看类型 string
  9. // 反序列化
  10. print_r(unserialize(demo4())['success']); // 输出 "1" 在数组中的键值为success

php函数中的参数

1.值参数(也是默认参数)
  1. 例:
  2. // $arg是形参
  3. function demo1(float $arg):float {
  4. return $arg *= 2;
  5. }
  6. // 参数
  7. $val = 10;
  8. echo demo1($val); // $val是实参 // 输出结果 20
2.引用参数
  1. 例:
  2. // &:取地址符 这里的实参引用了实参的值存储地址
  3. function demo2(float &$arg):float {
  4. return $arg *= 2;
  5. }
  6. $val = 200;
  7. echo demo2($val),'<br>';
  8. // 输出这里查看$val有没有随着$arg值得变化而变化
  9. echo $val; // 输出400 值随着形参$arg的变化而发生变化
3.默认参数

默认参数必须写在没有默认参数的后面

  1. 例:
  2. function demo3(float $a,float $b,string $c ='+') {
  3. // 定义一个变量承接结果
  4. $res = '';
  5. switch ($c) {
  6. case '+':
  7. $res = "$a + $b =".($a+$b);
  8. break;
  9. case '-':
  10. $res = "$a + $b =".($a-$b);
  11. break;
  12. case '*':
  13. $res = "$a + $b =".($a*$b);
  14. break;
  15. case '/':
  16. $res = "$a + $b =".($a/$b);
  17. break;
  18. default:
  19. $res = '非法值';
  20. break;
  21. }
  22. return $res;
  23. }
  24. // 默认
  25. echo demo3(2,3),'<br>'; // 输出5 "进入假发运算中"
  26. // 条件减号
  27. echo demo3(2,3,'-'),'<br>'; // 输出-1 "进入了减法运算中"
  28. // 条件非法
  29. echo demo3(2,3,'&'); // 输出 "非法值" 因为非法制没有这个符号
4.剩余参数

作用:剩余参数用在函数的参数列表中: 收集;所有传入函数的参数放入一个数组中

  1. // 剩余番薯用在函数的形参(函数列表中)中
  2. 例:
  3. function demo4(...$args) {
  4. return $args;
  5. }
  6. print_r(demo4(1,2,3,4,5)); // 输出数组[1,2,3,4,5]
  7. // 剩余参数用在实参中
  8. // 将剩余参数用在函数的调用表达式中, 是: 展开
  9. 例:
  10. function demo5(...$args) {
  11. // array_sum();数组求和
  12. return array_sum($args);
  13. }
  14. $arr = [1,2,3,4,5,6,7];
  15. // 直接将一个数组一剩余参数的形势传入函数中进行求和运算
  16. $res = demo5(...$arr);
  17. print_r($res); // 输出 27 数组元素值的总和

回调函数.匿名函数,闭包

array_map(回调函数名/回调函数,数组);

  1. 例:
  2. $data = range(1,100);
  3. $func = function($item) {
  4. if ($item % 2 === 0) return $item;
  5. };
  6. $arr = array_map($func,$data);
  7. echo '<pre>';
  8. print_r($arr);
  9. echo '</pre>';
  10. // 或简写[就是直接把匿名函数放进去]
  11. $data = range(1,100);
  12. $arr = array_map(function($item){
  13. if ($item % 2 === 0) return $item;
  14. }, $data);
  15. print_r($arr);

// array_filter(数组,回调函数名/回调函数);该函数把输入数组中的每个键值传给回调函数。如果回调函数返回 true,则把输入数组中的当前键值返回给结果数组。数组键名保持不变。

  1. // 去除数组中的空值
  2. 例:
  3. $data = range(1,100);
  4. $arr = array_map(function($item){
  5. if ($item % 2 === 0) return $item;
  6. }, $data);
  7. $res=array_filter($arr, function($item){
  8. return $item;
  9. });
  10. //
  11. echo '<pre>';
  12. print_r($res);
  13. echo '</pre>';

函数的命名空间

  1. 例:
  2. // 声明命名空间ns1并把函数demo1写入
  3. namespace ns1 {
  4. function demo1() {
  5. return __FUNCTION__;
  6. }
  7. }
  8. // 调用命名空阿ns1中的demo1()
  9. namespace {
  10. function demo2(){}
  11. echo ns1\demo1(); // 输出ns1\demo1
  12. }
Correcting teacher:GuanhuiGuanhui

Correction status:qualified

Teacher's comments:可以!尽量赶上进度,作业尽量早交!
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post