變數是用於存儲數據的容器,與代數相似,可以給變數賦予某個確定的值(例如:$x=3)或者是賦予其它的變數(例如:$x=$y+$z)。變數的定義主要有以下規則: 變數以$開始,後面跟著變數的名稱; 變數名稱有數字、字母、下劃線構成,且第一個字元不能為數字; 變數名稱不能包含空格; 變數名稱區分大小寫。 ... ...
變數是用於存儲數據的容器,與代數相似,可以給變數賦予某個確定的值(例如:$x=3)或者是賦予其它的變數(例如:$x=$y+$z)。變數的定義主要有以下規則:
- 變數以$開始,後面跟著變數的名稱;
- 變數名稱有數字、字母、下劃線構成,且第一個字元不能為數字;
- 變數名稱不能包含空格;
- 變數名稱區分大小寫。
php中的變數在第一次賦予它值的時候被創建,如果變數未賦值,則在輸出時會出現錯誤,如下麵所示:
<?php $x; echo $x; ?>
此時瀏覽器會出現錯誤提示:
這個部分與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/>"; //輸出類型為integ echo gettype($y),"<br/>"; //輸出類型為double echo gettype($str),"<br/>"; //輸出類型為string echo gettype($bool),"<br/>"; //輸出類型為boolean echo gettype($arr),"<br/>"; //輸出類型為array echo 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; /* * 以下這種方式是不被允許的,只有在函數內調用函數外的變數才能使用global golbal $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(); //輸出為:0 myTest(); //輸出為:1 myTest(); //輸出為: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]