博客列表 >php学习笔记(函数相关_作用域_闭包_回调_多指返回)

php学习笔记(函数相关_作用域_闭包_回调_多指返回)

庖丁
庖丁原创
2021年01月30日 13:01:29533浏览

1.函数作用域与闭包,回调的使用场景与参数调用

1.1函数作用域

  1. <?php
  2. //声明在函数之外的成员,默认是全局成员
  3. $name ='张三';
  4. $age = 10;
  5. function stus(){
  6. //只有调用时,才会创建函数作用域
  7. //访问外部成员方法1 global
  8. //访问外部成员方法2 $GLOBALS['name']
  9. //私有变量访问可以通过返回的方式
  10. $cla ='三年级';
  11. global $name;
  12. return $name.$GLOBALS['age'].$cla;
  13. }
  14. echo stus();

1.2闭包

没有名字的函数叫做匿名函数,匿名函数叫做闭包

  1. <?php
  2. //闭包:可以访问函数外部的自有变量
  3. //用关键字 use
  4. //匿名函数需要访问外部变量时用use关键字即可,支持引用传参
  5. $name = '张三';
  6. $age = 24;
  7. $stu = function () use ($name, &$age) {
  8. $age = 42;
  9. return $name . '的年龄是' . $age . '岁';
  10. };
  11. echo $stu();
  12. echo $age;
  13. //use禁止使用的三种参数
  14. //1.超全局$GLOBAL 2.$this 3.和当前参数同名不让用

1.3回调函数与使用场景

  1. <?php
  2. //php单线程,同步执行
  3. //回调函数call_user_fanc(),将耗时的函数变成异步执行,以免同步阻塞
  4. //使用场景:数据库链接
  5. function stu($name){
  6. return $name;
  7. }
  8. echo stu('李四');
  9. echo call_user_func('stu','张三');
  10. echo call_user_func_array('stu',['张三']);

1.4静态变量

  1. <?php
  2. //静态变量:不会随着函数作用域的消失而消失,会进入下一次的函数调用中
  3. //作用:函数多次调用中共享数据,场景:CMS系统栏目的无限分类
  4. function stu(){
  5. static $i = 1;
  6. echo $i;
  7. $i++;
  8. }
  9. echo stu();
  10. echo stu();
  11. echo stu();

2.函数的多值返回类型方式

函数只允许一个返回值,如果想返回多值有三种方法1.数组2.对象3.序列化字符串

2.1数组

  1. <?php
  2. function stumess()
  3. {
  4. return ['name' => '张三', 'age' => '25', 'cla' => '大学'];
  5. }
  6. echo stumess()['name'] === '张三' ? stumess()['age'] : 1;

2.2对象

  1. <?php
  2. function stumess()
  3. {
  4. return new class ()
  5. {
  6. public $name = '张三';
  7. public $age = 28;
  8. };
  9. }
  10. $stu = stumess();
  11. var_dump($stu);
  12. printf('name = %s,age = %d',$stu->name,$stu->age);

2.3序列化字符串

2.31 php内置的序列化函数serialize()

  1. <?php
  2. function stumess()
  3. {
  4. return serialize(['name' => '张三', 'age' => '25', 'cla' => '大学']);
  5. }
  6. //可将结果保存到文档里
  7. file_put_contents('wenzi.txt',stumess());
  8. //使用时还原
  9. var_dump(unserialize(stumess()));

2.32转换为通用的JSON序列化字符串函数json_encode()

  1. <?php
  2. function stumess()
  3. {
  4. return json_encode(['name' => '张三', 'age' => '25', 'cla' => '大学'],JSON_UNESCAPED_UNICODE);
  5. }
  6. //第二个参数可以将中文字符还原出来,JSON_UNESCAPED_UNICODE,如果不加会显示对应utf-8编码字符
  7. echo stumess();
  8. //还原JSON字符串函数 json_decode()
  9. $str = json_decode(stumess());
  10. var_dump($str);
  11. //json_decode() 默认解析为对象,如果需要解析成数组,需要加第二个参数ture
  12. $str = json_decode(stumess(),true);
  13. var_dump($str);
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议