使用靜態局部變量的原因是它不能被外部使用,但是它的值依然在沒此使用后保留,雖然使用全局變量可以實現相同的功能,但是它經常會造成意外,靜態局部變量的特點:
1.不會隨著函數的調用和退出而發生變化,不過,盡管該變量還繼續存在,但不能使用它,倘若再次調用定義它的函數時,它又可繼續使用,而且保存了前次被調用后留下的值.
2.靜態局部變量只會初始化一次
3.靜態屬性只能被初始化為一個字符值或一個常量,不能使用表達式,即使局部靜態變量定義時沒有賦初值,系統會自動賦初值0(對數值型變量)或空字符(對字符變量);靜態變量的初始值為0.
4.當多次調用一個函數且要求在調用之間保留某些變量的值時,可考慮采用靜態局部變量。雖然用全局變量也可以達到上述目的,但全局變量有時會造成意外的副作用,因此仍以采用局部靜態變量為宜。
PHP實例代碼如下:
- function test()
- {
- static $var = 5; //static $var = 1+1;就會報錯
- $var++;
- echo $var . ' ';
- }
- test(); //2
- test(); //3
- test(); //4
- echo $var; //報錯:Notice: Undefined variable: var
關于靜態全局變量,全局變量本身就是靜態存儲方式,所有的全局變量都是靜態變量,PHP代碼如下:
- function static_global(){
- global $glo;
- $glo++;
- echo $glo.'<br>';
- }
- static_global(); //1
- static_global(); //2
- static_global(); //3
- echo $glo . '<br>'; //3
- //$a 將會在包含文件 b.inc 中生效。 代碼如下 復制代碼
- <?php
- $a = 1;
- include "b.inc";
- ?>
- <?php
- //局部變量測試
- $s1= "out s1"; //全局變量
- function say(){
- $s1 = "in s1"; //局部變量
- echo "say():$s1";
- }
- say(); //輸出局部變量: in s1
- echo "<br/>";
- echo "function out:$s1"; ////輸出全局變量:out s1
- //static變量測試
- function count1(){
- $num = 0;
- $num++;
- echo $num." ";
- }
- function count2(){ //www.49028c.com
- static $num = 0;
- $num++;
- echo $num." ";
- }
- for($i=0; $i<10; $i++){
- count1(); //11 1 1 1 1 1 1 1 1 1
- }
- echo "<br/>";
- for($i=0; $i<10; $i++){
- count2(); //1 2 3 4 5 6 7 8 9 10
- }
- echo "<br/>";
- //全局變量在函數中運用,加global
- $a="php";
- $b = "java";
- function show(){
- echo $a; // 無輸出
- global $b;
- echo $b; //定義global,輸出java
- }
- show();
- ?>
- //輸出3
- //代碼如下 復制代碼
- <?php
- $a = 1;
- $b = 2;
- function Sum()
- {
- global $a, $b;
- $b = $a + $b;
- }
- Sum();
- echo $b; //3
- ?>
在全局范圍內訪問變量的第二個辦法,是用特殊的 PHP 自定義 $GLOBALS 數組,代碼如下:
- <?php
- $a = 1;
- $b = 2;
- function Sum()
- {
- $GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];
- }
- Sum();
- echo $b;
- ?>
靜態變量也提供了一種處理遞歸函數的方法,遞歸函數是一種調用自己的函數,代碼如下 :
- function Test()
- {
- static $count = 0;
- $count++;
- echo $count; //12345678910
- if ($count < 10) {
- Test ();
- }
- //$count--;
- }
- Test();
總結:
局部變量——用在函數內,作用域就是所在函數
全局變量——在函數外,作用域在整個php文件(包含了 include 和 require 引入的文件),但在函數中不能讀到,除非重新申明為global
靜態變量——用在函數內,被調用完后,內存不釋放,保留最后值,多用來統計累加.
新聞熱點
疑難解答