變量作用域、函數體調用全局變量以及靜態變量(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
你答對了嗎

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章