靜態變量
在函數內部 static $a = 0;
注意:聲明中用表達式的結果對其賦值會導致解析錯誤如static $a =3+3;(error)
靜態變量僅在局部函數域中存在(函數內部),函數執行完之后,變量值不會丟失,可用于遞歸調用.
在php中的變量范圍里,有一個非常重要的變量—php靜態變量static,在接下來的這篇文章中,我們將會以具體的代碼示例為大家詳細介紹有關php靜態變量static的主要用法,希望對大家有所幫助.
看看下面的例子,演示需要php靜態變量static的例子,代碼如下:
<?php function test(){ $w3sky = 0; echo $w3sky; $w3sky++; } ?>
本函數沒什么用處,因為每次調用時都會將 $w3sky 的值設為 0 并輸出 "0",將變量加一的 $w3sky++ 沒有作用,因為一旦退出本函數則變量 $w3sky 就不存在了,要寫一個不會丟失本次計數值的計數函數,要將變量 $w3sky 定義為靜態的.
例子,使用php靜態變量static的例子,代碼如下:
<?php function test(){ static $w3sky = 0; echo $w3sky; $w3sky++; } ?>
現在,每次調用 test() 函數都會輸出 $w3sky 的值并加一.
靜態變量也提供了一種處理遞歸函數的方法,遞歸函數是一種調用自己的函數,寫遞歸函數時要小心,因為可能會無窮遞歸下去,必須確保有充分的方法來中止遞歸,一下這個簡單的函數遞歸計數到 10,使用靜態變量 $count 來判斷何時停止,代碼如下:
- <?php
- function zdy ()
- {
- static $message = 0; //初始化一個靜態變量
- $message+=1; //靜態變量加1
- echo $message." "; //輸出靜態變量
- }
- function zdy1()
- {
- $message = 0; //聲明函數內部變量
- $message += 1; //局部變量加1
- echo $message." "; //輸出局部變量
- }
- for($i=0;$i<10;$i++) //輸出1到10
- zdy();
- echo "<p>";
- for($i=0;$i<10;$i++) //輸出10個1
- zdy1();
- echo "<br>";
- ?>
- //輸出的是:
- //1 2 3 4 5 6 7 8 9 10
- //1 1 1 1 1 1 1 1 1 1
全局變量
在函數體內定義的global變量,函數體外可以使用,在函數體外定義的global變量不能在函數體內使用,在全局范圍內訪問變量可以用特殊的 php 自定義 $globals 數組.
如:$globals["b"] = $globals["a"] + $globals["b"];
在一個函數域內用 global 語句導入的一個真正的全局變量實際上是建立了一個到全局變量的引用.
global $obj; 注:對于變量的 static 和 global 定義是以 應用 的方式實現的.
給變量賦值:傳地址賦值,簡單引用:
$bar = &$foo; //加&符號到將要賦值的變量前.
改動新的變量將影響到原始變量,這種賦值操作更加快速,注意:只有命名變量才可以傳地址賦值,注意:如果 $bar = &$a; $bar = &$foo; 改變$bar的值只能改變變量foo的值,而不改變a的值,引用改變了,代碼如下:
- <?php
- $my_var = 'hello world';
- test_global();
- function test_global() {
- // now in local scope
- // the $my_var variable doesn't exist
- // produces error: "undefined variable: my_var"
- echo $my_var;
- // now let's important the variable
- global $my_var;
- // works:
- echo $my_var;
- }
- ?>
新聞熱點
疑難解答