• php函数,static,globalkeyword及三种变量作用域


    函数

    和js函数相似,关注php与其它语言不用的地方

    • 函数的形參默认值

      形式:

      function f($a,$b=3,$vc = "abc"){
      
      }
      

      注意:没有给默认值的形參必须传递值,

    • 形參的传值问题

      一句话:形參的传值问题。事实上就是“变量之前的传值问题”,即实參变量传给形參变量。有值传递和引用传递

      引用传递(须要在形參前面加&符号而不是实參):

      function f($a,& $b){
      
      }
      
    • 函数參数的数量的问题

      1. 通常,形參和实參的数量是一致的;
      2. 当函数形參有默认值的时候。实參能够进行一定程度的省略(省略仅仅能从右往左省略)。
      3. 有一种定义和使用函数的特别形式(并不常见)它不定义形參,而实參随意给出。事实上系统中也有相似的函数:比方: – 灵活性体现之中的一个

        1. var_dump($v1);
        2. var_dump($v1,$v2,$v3);

        我们自己也能够定义这样的函数。事实上,这样的函数。依赖的是下面三个系统函数来获取相应的信息。以得到实參数据的处理:

        1. func_get_args(); // 获取实參数据列表,成为一个数组
        2. func_get_args(i);//i个实參数据,$i从0開始算起
        3. func_num_args(); // 获取实參的数量(个数)

        如:

        // 系统函数func_get_args()能够获取函数调用时传递过来的全部实參数据,而且都放入一个数组中!
        function f(){
            $arr = func_get_args();
        }

    函数的返回值:函数的返回值不是语法规定。而是业务所需,须要就返回。不须要则无需返回,返回值一定是通过return 语句!

    函数的其它形式:

    • 可变函数:一个变量的名字是一个变量 – > 灵活性体现
    • 可变变量:一个函数的名字是一个变量,事实上就是在调用函数的时候,使用一个变量名而已,该变量的内部,就是该函数名! – > 灵活性体现

    匿名函数

    形式1:将一个匿名函数“赋值”给一个变量,然后通过该变量调用该函数

    $f1 = function (){
    
    };
    

    使用:

    $f1(); // 调用该匿名函数,和可变函数使用一样的
    

    形式2:直接将匿名函数作为另外一个函数的实參传递进去(由于形參相应的是一个函数)

    如:

    function f1($a,$b,$sum){
        echo "$a =".$a;
        echo "$b =".$b;
        $result = $sum($a,$b);
        echo "result = ".$result;
    }
    调用:
    f1(21,2,function ($a,$b){
        returm $a + $b;
    });
    

    变量作用域

    定义:变量能够使用的范围

    php中有三种作用域

    • 局部作用域:在函数内部范围,相应的变量为局部变量
    • 全局作用域:不在函数内部的范围,–函数外部和代码块中的定义的变量是全局变量

    • 超全局作用域:指全部的代码范围。就称为超全局变量。事实上仅仅有系统提前定义的几个:$_GET,$POST,$_SERVER,$_SESSION,$_REQUEST,$GLOBALS,$_FILES,$_COOKIE..

    通常:

    • 全局范围不能訪问局部范围;
    • 局部范围不能訪问全局范围;
    • 函数内部的变量(局部变量),通常在函数调用运行结束后,就被“销毁”了;
    • 有一种局部变量,在函数调用结束后不会被“销毁”,这样的变量就是静态局部变量(用static修饰)。

    局部作用域使用(訪问)全局变量?(常见需求)

    php中不能像其它语言一样直接在局部作用域中訪问全局变量,
    
    做法1:而要使用global声明一个要使用的全局变量的同名局部变量
    
         如:
    
            $v = 4;
            function f(){
                global $v; // 使用global声明一个变量,该变量和全局变量同名。并和全局变量共同指向一个数据区,,相当于复制了引用
            }
    
    做法2:通过$GLOBALS提前定义变量訪问全局变量,如
    
        $v = 1;
        function f(){
            echo "$v = ".$GLOBALS['$v']; // 取得全局变量$v的值
            $GLOBALS['$v'] = 55; // 改变全局变量$v的值
            unset($GLOBALS['$v']); // 释放$v变量,此时全局变量$v就变成null了
        }
    
    但,假设我们对$GLOBALS变量的某个单元(下标)进行unset,则其就会全然销毁相应的全局变量。这里不是复制了引用
    

    有关函数的系统函数:

    • function_exists(函数名) : 推断一个函数是否存在
    • func_get_args();
    • func_get_args($index);
    • func_num_args()。

  • 相关阅读:
    CIA泄露资料分析(黑客工具&技术)—Windows篇
    包学会之浅入浅出Vue.js:结业篇
    包学会之浅入浅出Vue.js:升学篇
    包学会之浅入浅出Vue.js:开学篇
    Manacher算法详解
    CSP-S 2019 游记
    洛谷 P3373 【模板】线段树 2
    AHOI 2009 维护序列
    洛谷 P4017 最大食物链计数
    洛谷 SP14932 LCA
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/6978491.html
Copyright © 2020-2023  润新知