博主信息
博文 20
粉丝 0
评论 0
访问量 19975
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
php学习笔记(函数相关_作用域_闭包_回调_多指返回)
庖丁
原创
741人浏览过

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举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学