博主信息
博文 45
粉丝 0
评论 0
访问量 46952
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
php函数知识
咸鱼老爷
原创
823人浏览过

函数语法

  1. function 函数名称(类型限定 参数列表):返回类型{
  2. //函数体
  3. return 返回值
  4. }

函数分类

  • 命名函数 :自动提升到脚本的顶部,在全局的任何地方都可以调用
    1. function demo()
    2. {
    3. return 'php';
    4. }
    5. echo demo() . '<br>';
  • 匿名函数
    1. $php = function () {
    2. return 'php';
    3. };
    4. echo $php() . '<br>';

    函数的参数

  • 必选参数
    1. function hello(string $name): string
    2. {
    3. return 'hello' . $name;
    4. }
    5. echo hello('admin'), '<br>';
    6. echo hello(123), '<br>';
    7. echo hello(true), '<br>';
  • 可选参数
    可选参数放在参数列表末尾,并且指定其默认值
    当使用默认参数时,默认参数必须放在非默认参数的右侧,否则函数可能出错
    1. function hello1(string $name = 'admin'): string
    2. {
    3. return 'hello' . $name;
    4. }
    5. echo hello1('user'), '<br>';
    6. echo hello1(), '<br>';
  • 不定参数
    参数数量 func_num_args()
    参数数组 func_get_args()
    获取某一个参数 func_get_arg(n)
    1. function args()
    2. {
    3. $n = func_num_args();
    4. $args = implode(',', func_get_args());
    5. $arg = func_get_arg(1);
    6. printf('参数数量=%d 参数=%s,第二个参数:%s', $n, $args, $arg);
    7. //求和
    8. echo '参数之和' . array_sum(func_get_args());
    9. }
    10. args(1, 2, 4, 5);

    …rest语法 剩余参数
    1. function args2(...$args)
    2. {
    3. print_r(($args));
    4. $n = count($args);
    5. $argss = implode(',', $args);
    6. $arg = $args[1];
    7. printf('参数数量=%d 参数=%s,第二个参数:%s', $n, $argss, $arg);
    8. echo '参数之和' . array_sum($args);
    9. }
    10. args2(1, 2, 3, 4);
  • 引用参数
    php支持值传递和引用传递,默认就是值传递;引用传参:在函数内部对参数的任何更新都会实现映射到外部的参数中
    1. $name = 'admin';
    2. function demo5(&$name)
    3. {
    4. $name = 'user';
    5. }
    6. echo "\$name=" . $name;
    7. demo5($name);
    8. echo "\$name=" . $name;

    函数的返回值

    函数只允许有一个返回值:单值返回;如果需要返回多个值,返回类型可以是数组 对象 序列化的 字符串
  • 数组
    1. function ok(): array
    2. {
    3. return ['code' => 1, 'msg' => 'ok'];
    4. }
    5. var_dump(ok());
  • 对象
    1. function user()
    2. {
    3. return new class()
    4. {
    5. public $name = 'admin';
    6. public $email = 'admin@admin.com';
    7. };
    8. }
    9. $user = user();
    10. var_dump($user);
    11. printf('name=%s<br> email=%s <br>', $user->name, $user->email);
  • 序列化
    php内置的序列化函数 如果这个序列化的数据只在php中使用,应该使用php内置的序列化方法
    1. function xu(): string
    2. {
    3. return serialize(['code' => 1, 'msg' => 'ok']);
    4. }
    5. echo xu();

    在php中使用时还原成原来的类型
    $arr = unserialize(xu()); var_dump($arr);
  • 通用的json格式
    1. function demo6(): string
    2. {
    3. return json_encode(['code' => 1, 'msg' => 'ok']);
    4. }
    5. var_dump(demo6());

    如果当前脚本接收一个json格式的数据,可以转成php能够处理的数据类型
    • 对象
      $data = json_decode(demo6());var_dump($data); printf('status=%s,message=%s', $data->code, $data->msg);
    • 数组
      $arrTmp = json_decode(demo6(), true); var_dump($arrTmp);

      函数作用域.只有调用它的时候才会创建

      有2种方式可以在函数内部访问外部成员 $GLOBALS global $name
      ```html
      $name = ‘admin’;
      $email = ‘admin@qq.com’;
      function demoo(): string
      {
      $res = ‘’;
      global $name;
      $res .= ‘name=’ . $name . ‘<br>‘;
      $res .= ‘email=’ . $GLOBALS[‘email’] . ‘<br>‘;
      //私有成员
      $age=18;
      $res .= ‘age=’ . $age . ‘<br>‘;
      return $res;
      }

echo demoo();

  1. ![](https://img.php.cn/upload/image/279/798/549/1615543670657486.png)
  2. ###闭包函数:匿名函数,可以访问函数外部的自由变量/父作用域中的变量
  3. ```html
  4. $user11=function() use($name,$email){
  5. printf('name=%s,email=%s', $name, $email);
  6. };
  7. echo $user11() . '<br>';
  8. //闭包支持引用传参
  9. printf('现在的:name=%s,email=%s', $name, $email);
  10. $user12=function($newname,$newemail) use(&$name,&$email){
  11. $name=$newname;
  12. $email=$newemail;
  13. };
  14. echo $user12('user','user@admin.com') . '<br>';
  15. printf('改变后的:name=%s,email=%s', $name, $email);


ps: use禁止使用以下三种参数

  1. - 超全局不让用:$_GET;
  2. - $this
  3. - 与当前参数重名不让用

闭包经常用作函数的返回值

  1. function demo7($site){
  2. return function($color) use ($site){
  3. return sprintf('<h2 style="color:%s">%s</h2>',$color,$site);
  4. };
  5. }
  6. // $closure=demo7('站点');
  7. // echo $closure('red');
  8. //柯里化
  9. echo demo7('站点')('red');

异步回调执行

php是单线程,同步执行时如果遇到耗时函数会发生阻塞,应该将它改为异步回调执行
call_user_func(函数,函数列表);
call_user_func_array(函数,[参数数组])

  1. function demo8(string $name):string
  2. {
  3. return $name;
  4. }
  5. echo call_user_func('demo8','admin'),'<br>';
  6. echo call_user_func_array('demo8',['admin']);

静态变量

函数中的静态变量不会随函数调用结束而消失,它会自动进入到下一次的函数调用中,可以实现在函数的多次调用过程中:共享数据/数据通信

  1. function demo9(){
  2. static $i=1;
  3. echo $i,'<br>';
  4. $i++;
  5. }
  6. echo demo9();
  7. echo demo9();
  8. echo demo9();
  9. echo demo9();

批改老师:天蓬老师天蓬老师

批改状态:合格

老师批语:
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系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+教程免费学