• php学习day7--函数的相关知识


      今天我们主要学了函数的相关知识,是个比较基础的知识,但也是很重要的。

    一、函数

      函数就类似于一个工具,我们写好函数之后可以直接进行调用,可以很大的减少代码的从用性,提高页面性能和可读性。

      1.函数的定义

      在php中函数的定义方式为:

          function  name($形参1,$形参2.....){

            要执行的代码

            return  123;

          }

      在上方的函数定义式中,name代表函数名,小括号内是形参,是用来传递参数,花括号中的就是调用时需要执行的代码。

      函数的调用方式:

          name(实参1,实参2,......)

      当代码读到name(实参1,实参2,......)时,就会执行上述定义函数中花括号的内容,其中实参就会通过形参传递到函数内部,用来参与运算。花括号中如果有return则函数有返回值,返回值为return后跟的值;

      当调用函数时,如果不进行传递参数,可以给形参设置默认值:

          function name($x=1,$y=2){......}

      当在调用这个函数时,不进行传参,则函数运行中默认$x=1,$y=2;

      2.形参的传值问题:

        值传递:默认的方式,如果没有特别的设定,参数传值都是值传递。

        引用传递:需要在形参的前面加&符号:

      那么我们来看看以前学过的什么是值传递(拷贝传值)和引用传递:

      3.函数参数的数量问题

       通常函数调用时的实参数量,应该跟函数定义时的形参数量一致,如果函数定义时,形参有默认值,则对应的实参就可以进行一定程度的省略,注意:省略只能从右往左进行。

      有一种定义和使用函数的特别形式(并不常见):它不定义形参,而实参任意给出,这种函数系统中也经常见到比如:

          ver_dump($v1);

          var_dump($v1,$v2,$v3);

      我们自己也可以定义这种函数:

        在函数内部调用系统函数,func_get_args(),所有的实参数据都会放入一个数组中:

          $arr = func_get_args();     //获取实参数据列表

          func_get_arg($i);      // 获得第$i个实参,$i从零开始

          func_num_args();  //获取是实参的个数   

    二、函数的其他形式

      1.可变函数

      在之前我们学习过可变变量:一个变量的名字还是一个变量。

      与可变变量一样,一个函数的名字也是一个变量;

    可变变量的运用

       2.匿名函数

      匿名函数就是指没有名字的函数。匿名函数的形式有两种,

        形式1:将一个匿名函数“赋值”给一个变量。

            $a = function (){

              echo "这是一个匿名函数"

            };       //注意:这里要用分号

            $a();    //函数的调用。

            //匿名参数也可以带参数,也可有返回值,使用和正常函数差不多。

          形式2:将匿名函数当做实参来使用,如下图:

        

    三、函数的作用域

      变量的作用域,就是指:一个变量在什么范围中可以使用的情况。php中作用域有三个分别是局部作用域,超全局作用域,全局作用域;

      1.局部作用域

        就是指一个函数的内部范围。对应的变量就是局部变量。

        局部变量会在函数执行结束时候会将变量销毁,下次调用会还是原来的值。不过有个例外,那就是静态局部变量,在变量名称之前添加static,那么这个变量就不会被销毁。可以用来比如:

            function fn() {

              static $c = 0;   //此时就是静态局部变量,他的值会保留。

            }

        举个例子:

     

      2.超全局作用域

        就是指所有的代码范围。对应的变量就是超全局变量。其实只有系统预定义的几个:$_GET, $_POST, $_SERVER, $_REQUEST, $GLOBALS, $_SESSION, $_COOKIE, $_FILES

      3.全局作用域

        就是不在函数内部的范围----函数外部。对应的变量就是全局变量。

       注意:

        1)通常情况下全局范围不能访问局部变量。

     

        2)局部范围不能访问全局变量。 

       那么,如何在局部区域使用全局变量呢?

      1)我们可以在函数中,使用global关键字来声明一个要使用的全局变量的同名局部变量。

       需要注意的是:其实函数内部的$v4是局部变量,函数外的$v4是全局变量,两个变量不同,但是指向是相同的(也就是引用关系)

      2)使用$GLOBALS超全局变量,可以认为是全局变量的另一种使用方式。

      

      但是,如果我们队$GLOBALS变量的某个单元(也就是下标)进行unset,则其就会完全对应销毁,这是因为$GLOBALS对全局变量的使用可以看做是全局变量的另一种语法形式而已,而不是引用关系。如图:

    四、函数的编程思想

      1.递归思想----递归函数

        递归函数就是一个函数内部调用它自己的函数!

          function fn($n){

            echo $n;

            fn($n);

          }

          fn();

        从上面的这个函数来看,这个函数是死循环,在项目中不能这样使用,我们需要让他按照我们的要求停下来。

      运用递归函数来求n的阶乘;

        function  fn1($n){

          if($n==1){

            return 1;

          }

          $res = $n*fn1($n-1);

        }

        fn1(n);

        递归思想总结:当面对一个大问题时,该大问题可以经由该问题的“小一级问题”而经过简单计算获得,而且,可以获知这类问题的“最小一级问题”答案,则此时就可以用递归思想来解决。

      2.递推(迭代)思想

        递推的思想就是:最小的问题是已经解决,一级一级向上解决,直到解决完问题:

          $a = 1;

          for($n=2;$n<=5;++$n){

            $res = $n*$a;

            $a = $res;

          }

           echo  $res;

        当一个问题既可以用递推和递归同事能解决问题,我们需要优先选用递推思想,因为递归的思想更消耗资源。

        好了,今天的学习就到这里,我们明天继续。

      

  • 相关阅读:
    机器学习——模型评估与选择
    论文等级
    python简介
    记忆力
    PyQt 5控件
    PyQt5对话框
    PyQt 5事件和信号
    PyQt 5菜单和工具栏
    PyQt 5布局管理
    PyQt 5的基本功能
  • 原文地址:https://www.cnblogs.com/pzp-fire/p/5859796.html
Copyright © 2020-2023  润新知