8.函数

☀️什么是函数

函数就是一个功能

PS:函数学习三要点:1,函数的作用.2,函数的参数.3,函数的返回值

☀️函数学习重点

image-20220329085300513

☀️函数的分类介绍

  1. 根据是否系统自带
    • 系统函数
    • 自定义函数
  2. 根据是否具有返回值
    • 带有返回值得函数
    • 执行过程的函数
  3. 根据函数结构的不同
    • 一般函数
    • 变量函数
    • 回调函数
    • 内部函数
    • 递归函数
    • 闭包函数

☀️函数的定义

自定义函数语法结构

fucntion 变量名(形参) {
    函数体;
}
// 函数名不区分大小写
// 函数声明要有意义
// 不能和已存在的函数重名(系统函数,之前自定义的函数)

调用函数

函数名称();

函数的特征:

1.  函数定义之后,不调用不执行
1.  函数调用不分前后,PHP解析器在执行代码的时候就已经预加载了

return语句

  1. 具有return语句的函数就是有返回值的函数
  2. 没有return语句的函数就是执行过程函数(执行过程函数只能执行一边操作,不能再做其他操作)
  3. return语句的作用
    • 如果函数中存在return语句并执行了,那函数的执行结果就可以被变量接收(可以继续使用该结果做运算或其他操作)
    • 如果函数执行过程中执行了return语句,那么后续语句不再执行

函数的参数

  1. 函数的参数分为形参和实参

    • 形参:形式上的参数,在定义函数的()内使用

    • 实参:实际上的参数,在调用函数的()内使用

    • 注意;

      函数有定义形参,那调用时一定要传入实参

      穿入的形参和实参要一一对应(位置上)

      image-20220329095751805

可变长度参数列表

  • 一个系统函数`func_get_args();

  • 作用:把用户传递过来的实参以数组的形式存储起来

  • 返回值:一个实参数组

  • 好处就是不用担心传入实参和形参不对应

function demo() {
    // 获取实参并储存起来
	$args = func_get_args();
    var_dump($args);  // 让你看一下
    $sum = 0;
    foreach($args as $v) {
        $sum += $v;
    };
    return $sum;
};
echo demo(2, 34, 132, 5445, 232);

image-20220413200010589

函数的变量作用域

  1. 局部变量

    • 在函数内部定义的变量,作用范围仅限函数内部

    • 形参也是局部变量

  2. 全局变量

    • 在函数外边声明变量还是无法在函数内使用,即他还不是全局变量只是普通变量

    • 全局变量声明:

      1. 方法1: global关键字

        如果一个变量在函数内部已经赋值,之后使用global进行全局化声明,结果是该变量的值变为了函数外部变量的值

        $str = "nihao";
        function demo() {
            // 在函数内部使用global关键字,把普通变量变为全局变量
            global $str;  // 想要修改值不可以在这改,你细品
            echo $str;
        };
        demo();
        
      2. 方法2:使用系统预定义变量$GLOBALS ⭐⭐⭐⭐⭐

        $GLOBALS数组会以获取页面中所有可以使用的变量(包括预定义变量)

        $name = "张三";
        function demo2() {
            echo $GLOBALS["name"];
        }
        demo2();
        var_dump($GLOBALS);
        

☀️函数的几大分类

1. 静态函数

  • 在函数内部使用static声明的变量就是静态变量,所在函数就是静态函数

  • 静态变量特征:

    1. 静态变量只会被初始化一次
    2. 静态变量在函数运行结束后不会被回收
    3. 静态函数一般用于计算函数调用次数
    <?php
    function demo3() {
        $n = 1;
        echo $n . "</br>";
        $n++;
    };
    demo3();
    demo3();
    demo3();
    demo3();
    ?>
    
    image-20220330155308660
    <?php
    function demo3() {
        static $n = 1;  // 只会被初始化一次
        echo $n . "</br>";
        $n++;
    };
    demo3();
    demo3();
    demo3();
    demo3();
    ?>
    

    image-20220330155441699

2. 引用传参

  1. 变量的引用

    • 就是把变量地址给别人用

      $right = "redmeng";
      $left = &$right;  // &地址引用符
      echo $right;
      echo "<br/>";
      echo $left;
      

3.变量函数

  1. 可变变量

    $name = 'hello';
    $hello = '你好呀';
    var_dump($$name); // 两个$($$)
    

    image-20220413145522019

  2. 变量函数

    • 当一个变量的值是某个函数的名称字符串时,我们可以使用变量名()的方式调用对应名称的函数,这种调用方式就是变量函数

    • 例子

      $var = 'demo';
      function demo() {
          echo 'Hello World';
      };
      $var(); // 等价于$demo
      // 结果: Hello World
      

4.回调函数

  1. 定义: 在函数内部使用变量函数来调用外部其他函数的函数

    function demo($name) {
        $name();
    }
    function ZhangSan() {
        echo '你好,我叫张三';
    }
    demo('ZhangSan');
    

    image-20220413151751019

  2. 回调函数只是变量函数中的一种,本质上还是变量函数

  3. 作用: 用户通过传输不同的实参来调用不同的函数

5.内部函数(了解)

  1. 定义:在函数内部声明的函数就是内部函数
  2. 现在都用面向对象,用类去实现一些功能了,所以内部函数被取缔了
  3. 需要了解的知识点;
    • 内部函数无法在外部直接调用
    • 函内部不会预加载,PHP解释器只是预先加载函数但不知道函数内部情况
    • 要调用内部函数需要先调用外部函数,再去调用内部函数

6.递归函数(重点)

  1. 简单说就是自己玩自己

  2. 在一个函数中调用当前函数

  3. 先一层一层向内递,只有在一层一层原路归

  4. function demo($num) {
        echo $num;
        if($num > 0) {
            demo($num - 1);
        } else {
            echo '<hr/>';
        };
        echo $num;
    };
    demo(2);
    

image-20220413155921120

	<hr/>

image-20220413160219295

7.匿名函数

  1. 不写函数名的函数就是匿名函数

  2. 匿名函数不是函数Function而是对象类型Object,属于的是表达式

  3. $demo = function () {
        echo 'Hello World';
    };  // ; 一定要写
    $demo();// 变量函数
    var_dump($demo);
    

    image-20220413185532456

8.闭包函数

  1. 闭包函数就是匿名函数的高级应用.

  2. 定义:在子函数中内部使用use关键字使用父函数的变量

function father(){
    // 定义父函数的局部变量
    $var = 'Hello World';
    // 声明匿名函数并且使用use关键字进行闭包
    // use() ()中为父元素变量
    $son = function () use($var){
        echo $var;
    };
    // 调用内部函数 
    $son();  // 变量函数
};
father();  // 结果Hello World

与global的区别

$pph = "这是网页变量";
function father(){
    $pph = 'Hello World';
    function son(){
        global $pph; // 让$pph成为全局变量
        echo $pph;
    };
    son();
};
father();  // 结果: 这是网页变量

9.匿名回调

  1. 和回调函数差不多但是使用匿名函数的形式

    function js($jia) {
      	$no1 = 6;
        $no2 = 9;
        echo $jia($no1, $no2);
    };
    js(function () {return $no1 + $no2;};);
    /*  在js函数中把()中匿名函数赋给了$jia变量
    	就是 $jia = function () {return $no1 + $no2;};
    	之后又调用函数$jia($no1, $no2);
    	最后输出结果 15 
    */
    
    
  2. 与回调函数的区别

    • 回调函数以字符串的形式传入
    • 匿名回调以匿名函数形式传入
    • 以字符串的方式传入的回调函数: 该函数可以多次调用,任意调用,因为这是一个预加载的普通函数
    • 匿名函数方式传入的匿名回调函数: 只能在当前回调函数中使用,其他地方无法使用
    • 匿名回调的效率更高,因为匿名回调函数运行完毕后,匿名函数就会被回收,而字符串方式传入的函数是提前预加载的普通函数所以在页面解除之前一直存在

☀️系统函数手册学习

  • image-20220413223657885

  • 有关数据解释

    • mixed: 任何数据类型(可能是输入也可能是输出)

      image-20220413223424711

      image-20220413223451807

    • 带有&符参数的函数,表示这个参数不能传数值,只能传递一个变量,函数中将变量的值改变,我们在函数外部使用这个变量时也是变化的

    • 带有[]的参数函数,表示这个参数是可选的

    • 带有...的参数函数,表示可以传入任意多个参数

    • 带有callback的参数函数,表示这个位置需要传入一个回调函数

☀️文件的包含

  • include 文件包含

    • 作用: 相当于将文件复制到当前执行文件中
    • 常用于包含数据库或者配置文件,但任何PHP文件都可以包含
    • 形式:(PS:它们都有返回值,引入成功返回1,失败返回false)
      • 函数形式: include()
      • 指令形式: include ''
  • include_once 单次的文件包含

    • 作用:相当于将文件复制到当前执行文件中,但只包含一次,如果文件已经被包含经不在包含,并返回true
    • 形式:(PS:它们都有返回值,引入成功返回1,失败返回false)
      • 函数形式: include_once()
      • 指令形式: include_once ''
  • includeinclude_once 的区别

    1. include包含文件可以包含N次,而include_once只能包含一次
    2. include的效率略高于include_once,因为include_once需要判断
    3. include包含文件成功返回Int类型1,但include_once第一次包含文件返回1,以后包含相同文件返回true
  • require 文件包含(请求 需要)

    1. 作用:和include一样
    2. 与include的区别: include包含失败后后续代码还会继续执行(warning级错误),但require不会(error级错误)
  • require_once:单次的文件包含

    • 同👆
posted @   VarFa  阅读(52)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示