PHP變數的使用
最後更新:2017-02-28
來源:互聯網
上載者:User
變數
PHP變數的使用
作者:sports98 2002-8-13
很多朋友在編寫PHP程式的時候有時候對變數總有著不能確定的問題,而且也有很多問題就是因為
變數的處理不當所造成的。這裡就PHP變數系統說以下,不足之處還望指教。
PHP的變數分為全域變數與局部變數。
何為全域變數?
學過C/JAVA/C++之類的朋友一定瞭解main(){}內聲明的變數所達的地區了~,而PHP為解釋性語句並非
編譯語言,我們也知道PHP不存在main(){}主體,從何聲明?其實PHP頁面本身就是個main(){}只要是在頁面內
而非在函數內聲明的變數我們都稱其為全域變數...例如:
<?php
$int_a=0; //初始全域變數$int_a將其賦值為0
echo "全域變數:".$int_a; //列印全域變數
function child_a(){ //局部變數的使用
$int_a=0; //這裡是局部變數,雖然與全域變數名相同但此變數僅在child_a內可見
echo "From child_a:".$int_a;
}
function child_b(){ //調用全域變數
global $int_a; //聲明調用全域變數
echo "From child_b:".$int_a;
}
?>
從上面的一個例子,我們可以很簡單明了的看明白PHP中全域與局部變數之間的差距...
另我們高興的是PHP提供了其他的CGI語言的伺服器全域變數...這些變數當頁面調入的時候就已經由系統自動產生
這些全域變數包含在
$_SERVER($HTTP_SERVER_VARS) (伺服器提供的相關變數服務) PHP4.1.0
$_ENV($HTTP_ENV_VARS) (儲存相關環境變數) PHP4.1.0
$_POST (儲存使用Form post方法提交的變數) PHP4.1.0
$_GET (儲存使用Form GET/URI方法提交的變數) PHP4.1.0
$_COOKIE (儲存使用頁面獲得的COOKIE資料) PHP4.1.0
$_SESSION (儲存網站內會話變數) PHP4.1.0
$HTTP_POST_VARS (同$_POST,按linuxforum.net一帖對此的評論是$_POST的效率比其更高) PHP4.1.0
$HTTP_GET_VARS (同$_GET,評論同上.) PHP4.1.0
$_REQUEST (包含了$_GET,$_POST,$_COOKIE,$_FILES) PHP4.1.0
$_FILES (嚴格的說此變數已經包含在$_POST和$HTTP_POST_VARS,主要是獲得form post方式提交的file變數) PHP4.1.0
$GLOBALS (儲存所有全域變數的數組) PHP3.0.0
$php_errormsg (此全域變數必須在php.ini中將其開啟:track_error=on)
以上變數為系統全域變數,您不需要聲明他們就可以直接使用,當然了,您的PHP版本一定要高於或等於他們後面所標註的版本號碼。
在使用這些變數的時候,您無需用global關鍵字來聲明他們...
<?php
function g_p(){
echo "Welcome ".$_SERVER[REMOTE_ADDR].". nice meet you I am".$_SERVER[SERVER_ADDR];
// Welcome 192.168.0.3. nice meet you I am 192.168.0.1
}
?>
自訂變數,PHP提供的自訂變數並不象編譯型語系那樣,需要先聲明。而是直接使用,但如果一個不合理的程式變數的雜亂無規
我想過個幾天后也許你自己都不會讀明白的~,如果您只需要一個過度變數,您可以隨意的去聲明他只要不與其他變數發生衝突,而且符合命名規則
用後建議使用unset將其刪除..
PHP還提供了變數的變數這個概念
就如以前有人發帖問過這個問題
下面將這個表達一下~,其實這是個最簡單的變數的變數方法,我想如果對C裡的指標和地址比較熟悉的人理解這個會很快的.
<?php
$vvv="int_a";
$int_a="vvv";
echo "vvv is:".$vvv; //vvv is:int_a
echo "int_a is:".$int_a; //int_a is:vvv
echo '$$vvv is:'.$$vvv; //$$vvv is:vvv
echo '$$int_a is:'.$$int_a; //$$int_a is:int_a
?>
另:在一開始接觸PHP的時候被他的所輸即可得(就是提交變數可以直接使用起name標記的值來做為變數使用.),隨著時間的推移,網路的發展
PHP.net開發小組發現在這裡竟然有不少人在做文章。例:
<?php
for($int_a;$int_a<100;$int_a++){
echo "I am $int_a \r\n<br>";
}
?>
以上程式按邏輯來說,程式象系統申請一新變數$int_a由於未賦預設值,系統將預設給$int_a賦於0,此時應該列印100行 i am ...
但是如果有人傳遞過來這個變數呢???比如說
http://url/count.php?int_a=99 此時系統將只列印一行。我這裡只是簡單的說一下
如果這個程式是操作你的資料庫,或操作你的機密性檔案,你所需要的是私人變數而非外界傳遞過來的變數...,我個人覺得PHP開發小組
在這個問題上的處理是借鑒了編譯語言的優點..
不過不用擔心如果你覺得頁面不受外界變數的影響,而且暫時也無須提高到這個安全度的話您可以使用
if($_GLOBAL_ARRAY){//判斷是否存在全域變數的數組
extract($_GLOBAL_ARRAY,EXTR_PREFIX_SAME,"_global_array"); //將數組內變數匯入到當前的變數表內,如果發生衝突則將全域變數前加上_global_array首碼
}
由於PHP小組對系統的安全提高,因此分發出來的版本自php4.2.X後已經預設將register_global選項設定為OFF,如果您不需要使用的話可以將其開啟ON
總結:
PHP是個很優秀的WEB CGI語言,PHP的免費與很多資料庫的緊密結合,他能夠完成其他伺服器指令碼所完成的特定服務,ASP所提供的中介軟體,在PHP
中可以通過dl()進或使用靜態擴充將其載入進PHP。而PHP的變數也會越來越完善...
學有所限,如有不正還請指教。