变量作用域、函数体调用全局变量以及静态变量(static)的探讨

开题,我们用题目引入
* 写出如下程序的输出结果

<?php
  $count = 5;
  function get_count(){
        static $count;
        return $count++;
  }

  echo $count;
  ++$count;

  echo get_count();
  echo get_count();
  ?>

这段程序的输出结果是什么?
分析:
static 静态变量
变量的作用域:函数体外面为全局变量 函数体内变量为局部变量
延伸思考:
函数的参数以及参数的引用
函数的返回值以及引用返回
外部文件的导入(include 和 require)
系统内置函数

知识点:
* 1.变量的作用域
变量的作用域:变量的范围。变量的范围即他定义的上下文背景(它的生效范围)。 大部分的PHP变量只有一个单独的范围。这个单独的范围跨度同样包括了include和require的引入文件。

 // 例:
 $outer = 'str';//全局变量
 function myfunc(){ 
        echo $outer;//局部变量
 }

全局变量是不能拿到函数体内部来使用的。
如果函数体内部引用外部的全局变量,如下两种方法
1.局部对全局变量,引用时使用 global关键字。
2.$GLOBALS[‘outer’]
函数对于超全局数组可以直接调用
示例如下:

//1.局部对全局变量,引用时使用 global关键字
 $outer ='str';
function myf1(){
    global $outer;
    echo $outer;
}
//  2.通过全局数组(魔术数组)$GLOBALS['outer']
 $outer ='str';
function myf2(){
    echo $GLOBALS['outer'] ;
}

知识点:
- 2.静态变量
静态变量仅在局部函数域中存在,但当程序执行离开此作用域时,该内存并不会消失。
static特点:
* 1.仅初始化一次
* 2.初始化时需要赋值
* 3.每次执行函数 该值会保留 即:内存不释放
* 4.static修饰的变量是局部的 仅在函数内部有效
* 5.可以记录函数的调用次数,从而可以再某些条件下终止递归
如下例子:

  function  myfunc3(){
      static $a =1;//只有首次调用才执行 往后不再执行
      echo $a++;//++再后 先返回$a  在计算++哦
  }
  //调用三次对应$a输出的情况
  myfunc3(); 1
  myfunc3()  2
  myfunc3()  3

知识武装到这里,然后带着我们的知识武器在回顾到开始的题目中:
最终的结果:51
你答对了吗

猜你喜欢

转载自blog.csdn.net/qq_17040587/article/details/82022060