PHP變數的使用

來源:互聯網
上載者: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的變數也會越來越完善...


                                            學有所限,如有不正還請指教。
        

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.