標籤:
變數是用於儲存資料的容器,與代數相似,可以給變數賦予某個確定的值(例如:$x=3)或者是賦予其它的變數(例如:$x=$y+$z)。變數的定義主要有以下規則:
- 變數以$開始,後面跟著變數的名稱;
- 變數名稱有數字、字母、底線構成,且第一個字元不能為數字;
- 變數名稱不能包含空格;
- 變數名稱區分大小寫。
php中的變數在第一次賦予它值的時候被建立,如果變數未賦值,則在輸出時會出現錯誤,如下面所示:
<?php$x;echo $x;?>
此時瀏覽器會出現錯誤提示:
這個部分與Python有所區別,Python中如果變數沒有被賦值,編譯器會直接提示錯誤,我們需要注意一下。
圖、Python變數未賦值發生錯誤
php是一門弱類型語言,在定義變數時,我們不需要定義變數的類型,php會根據變數的值,自動的將變數轉換成正確的資料類型。如下例所示:
<?php$x=3;$y=3.0;$str="hello";$bool=false;$arr=array(1,2,3);$_null=NULL;echo gettype($x),"<br/>"; //輸出類型為integecho gettype($y),"<br/>"; //輸出類型為doubleecho gettype($str),"<br/>"; //輸出類型為stringecho gettype($bool),"<br/>"; //輸出類型為booleanecho gettype($arr),"<br/>"; //輸出類型為arrayecho gettype($_null),"<br/>"; //輸出類型為NULL?>
結果為:
接下來我們將對php的四種變數範圍進行討論,變數範圍定義了變數的作用範圍,php主要有以下四種變數範圍:
- local
- global
- static
- parameter(參數)
(1)局部與全域範圍
在函數外定義的變數,擁有全域範圍,除了函數外,全域範圍可以被指令碼中的任何部分訪問,要在一個函數中訪問全域變數,需要在函數中變數之前加上
global 關鍵字。
執行個體:
<?php/*局部範圍與全域範圍*/$a=5;function test(){ $b=10; echo "測試函數內變數<br/>"; echo "變數a的值為:$a <br/>"; //變數$a未在函數內定義,在引用時出現錯誤. echo "變數b的值為:$b<br/>";}test();echo "測試函數外變數<br/>";echo "變數a的值為:$a <br/>";echo "變數b的值為:$b<br/>"; //變數$a未在函數內定義,在引用時出現警告.?>
結果如下:
圖、局部變數與全域變數
可見,在局部函數裡面,是不能直接存取全域變數的,如果要訪問全域變數,須在函數裡面的變數前加上global關鍵字。同樣,在函數外也不能直接存取函數裡面的變數,函數執行結束記憶體會自動回收,故我們無法訪問到。
(2)global關鍵字
global 關鍵字用於函數內訪問全域變數,在函數內調用函數外定義的全域變數,需要用global關鍵字。值得一提的是,這和參數的調用不同,參數的調用並不會改變該變數在記憶體中的值,而global調用是直接調用記憶體中的該值,直接對它進行操作,故會改變其值。
<?php/*在函數內調用函數外的變數,需要用到global關鍵字*//*重要:這種調用會改變變數在記憶體中的值*/$x=5;$y=6;/* * 以下這種方式是不被允許的,只有在函數內調用函數外的變數才能使用globalgolbal $z=7;*/function myTest(){ global $x,$y; $y=$x+$y;}myTest();echo "y=$y" //輸出y=11?>
*注意:超級全域變數 $GLOBALS[index]
php將所有全域變數儲存在一個名為:$GLOBALS[index]的數組中,這個數組可以在函數內訪問,也可以用來直接更新全域變數(只能在函數內進行)。
執行個體:
<?php/* GLOBALS[index]的用法講解 */$x=5;$y=6;function myTest_1(){ $GLOBALS[‘y‘]=$GLOBALS[‘x‘]+$GLOBALS[‘y‘]; /*index不用寫$字元,否則報錯:$x,$y undefined $GLOBALS[‘$y‘]=$GLOBALS[‘$x‘]+$GLOBALS[‘$y‘]; */}function myTest_2(){ $GLOBALS[‘x‘]=15;}echo "執行myTest_1:<br/>";myTest_1();echo "y=$y","<br/>";echo "x=$x","<br/>";$GLOBALS[‘$x‘]=12; //未將GLOBALS[index]放在函數裡面,無效echo "x=$x","<br/>";echo "執行myTest_2:<br/>";myTest_2();echo "x=$x","<br/>";?>
結果為:
圖、GLOBALS[index]的用法樣本
(3)static關鍵字
在一個函數執行完成之後,它的變數通常都會刪除,有時我們希望函數中的某個變數保留,這時我們可以在申明變數時使用static關鍵字:
執行個體:
<?php/*靜態變數static的用法*/function myTest(){ static $x=0,$y=1; echo $x; $x++;}myTest(); //輸出為:0myTest(); //輸出為:1myTest(); //輸出為:2/*函數裡面的靜態變數不能直接被訪問*/echo $y; //輸出為:Notice: Undefined variable: y?>
(4)參數範圍
參數(parameter)的作用是將值傳遞給函數的局部變數。
執行個體:
<?php/*參數(parameter)傳遞*/function myTest($x){ echo "傳遞的值為:$x.<br/>";}myTest(5); //結果為:傳遞的值為5.myTest("string") //結果為:傳遞的值為string.?>
==php新手,有不對的地方希望各位博友提醒,萬分感謝==
Technorati 標籤: php,變數,local,global,static,參數傳遞,GLOBALS[index]
php學習日誌(2)-php變數