多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php開源 > php教程 > php 變量作用域?qū)W習(xí)筆記分享

php 變量作用域?qū)W習(xí)筆記分享

來源:程序員人生   發(fā)布時(shí)間:2014-04-19 12:10:34 閱讀次數(shù):3135次

變量作用域就是一個(gè)變量在頁面與函數(shù)之間可不可以相互使用,它的作用范圍在哪里,下面小編來給大家介紹php變量使用域的一些學(xué)習(xí)筆記拿出來與大家交流一下。

在php當(dāng)中變量的作用范圍php手冊上是這樣描述的

在用戶自定義函數(shù)中,一個(gè)局部函數(shù)范圍將被引入,任何用于函數(shù)內(nèi)部的變量按缺省情況將被限制在局部函數(shù)范圍內(nèi)。例如如下代碼:

  1. <?php 
  2. $a = 1; /* global scope */ 
  3. function Test() 
  4.    echo $a/* reference to local scope variable */ 
  5. Test(); 
  6. ?> 

這個(gè)腳本不會(huì)有任何輸出,因?yàn)?echo 語句引用了一個(gè)局部版本的變量 $a,而且在這個(gè)范圍內(nèi),它并沒有被賦值。你可能注意到 PHP 的全局變量和 C 語言有一點(diǎn)點(diǎn)不同,在 C 語言中,全局變量在函數(shù)中自動(dòng)生效,除非被局部變量覆蓋,上面開個(gè)頭,下面我來來詳細(xì)介紹

在PHP中變量主要有:內(nèi)置超級(jí)全局變量,一般的變量,常量,全局變量,靜態(tài)變量等.

■內(nèi)置超級(jí)全局變量可以在腳本的任何地方使用和可見。即如果我們在一個(gè)PHP頁面中改變了其中的一個(gè)值,那么在其他PHP頁面中使用時(shí),它的值也會(huì)發(fā)生改變。

■常量一旦被聲明將可以在全局可見,也就是說,它們可以函數(shù)內(nèi)外使用,但是這僅僅限于一個(gè)頁面之中(包含我們通過include和include_once)包含進(jìn)來的PHP腳本,但是在其他的頁面中就不能使用了。

■在一個(gè)腳本中聲明的全局變量在整個(gè)腳本中是可見的,但不是在函數(shù)內(nèi)部,在函數(shù)內(nèi)部的變量如果與全局變量名稱相同,以函數(shù)內(nèi)部的變量為準(zhǔn)。

■函數(shù)內(nèi)部使用的變量聲明為全局變量時(shí),其名稱要與全局變量的名稱一致,在這樣的情況下,我們就可以在函數(shù)中使用函數(shù)外部的全局變量了,這樣就可以避免上一種因?yàn)楹瘮?shù)內(nèi)部的變量與外部的全局變量名稱相同而覆蓋了外部變量這樣的情況。

■在函數(shù)內(nèi)部創(chuàng)建并聲明為靜態(tài)的變量無法在函數(shù)外部可見,但是可以在函數(shù)的多次執(zhí)行過程中保持該值,最常見的情況就是在函數(shù)的遞歸執(zhí)行的過程之中。

■在函數(shù)內(nèi)部創(chuàng)建的變量對(duì)函數(shù)來說是本地的,而當(dāng)函數(shù)終止時(shí),該變量也就不存在了。

超級(jí)全局變量的完整列表如下:

■.$GOBALS 所有全局變量數(shù)組

■.$_SERVER 服務(wù)器環(huán)境變量數(shù)組

■.$_POST 通過POST方法傳遞給該腳本的變量數(shù)組

■.$_GET 通過GET方法傳遞給該腳本的變量數(shù)組

■.$_COOKIE cookie變量數(shù)組

■.$_FILES 與文件上傳相關(guān)的變量數(shù)組

■.$ENV 環(huán)境變量數(shù)組

■.$_REQUEST 所有用戶輸入的變量數(shù)組包括$_GET $_POST $_COOKIE 所包含的輸入內(nèi)容

■.$_SESSION 會(huì)話變量數(shù)組

1、局部變量

在函數(shù)中聲明的變量認(rèn)為是局部變量,即它只能在該函數(shù)中引用,如果在函數(shù)外復(fù)制,講被認(rèn)為是完全不同的另一個(gè)變量(即不同于函數(shù)中所包含的那個(gè)變量)。注意,退出聲明變量的函數(shù)時(shí),變量及其相應(yīng)的值就會(huì)撤銷,代碼如下:

  1. $x=4; 
  2. function assignx(){ 
  3. $x=0; 
  4. printf("$x inside function is %d <br/>",$x); 
  5. assignx(); 
  6. printf("$x outside of function is %d <br/>",$x); 
  7.  
  8. //執(zhí)行結(jié)果為 
  9. $ inside function is 0 
  10. $ outside of function is 4 

2、函數(shù)參數(shù)

PHP和其他編程語言一樣,任何接受參數(shù)的函數(shù)都必須在函數(shù)首部中聲明這些參數(shù)。雖然這些參數(shù)(值參數(shù))接受函數(shù)外部的值,但退出函數(shù)后就無法再訪問這些參數(shù),代碼如下:

  1. function x10($value){ 
  2. $value
  3. $value=$value*10 
  4. return $value

記住,雖然在聲明參數(shù)的函數(shù)內(nèi)部可以訪問和出力這些函數(shù)參數(shù),但當(dāng)函數(shù)執(zhí)行結(jié)束時(shí),參數(shù)就會(huì)撤銷。

3、全局變量

全局變量可以在程序的任何地方訪問。但是,為了修改一個(gè)全局變量,必須要修改該變量的函數(shù)中將其顯式地聲明為全局變量。只要在變量前面加上關(guān)鍵字GLOBAL,就是全局變量。如果將GLOBA關(guān)鍵字放在一個(gè)已有的變量前面,則是告訴PHP姚使用同名的變量。

使用 $GLOBALS 替代 global,代碼如下:

  1. <?php 
  2. $a = 1; 
  3. $b = 2; 
  4. function Sum() 
  5.    $GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"]; 
  6. Sum(); 
  7. echo $b
  8. ?> 

在 $GLOBALS 數(shù)組中,每一個(gè)變量為一個(gè)元素,鍵名對(duì)應(yīng)變量名,值變量的內(nèi)容。$GLOBALS 之所以在全局范圍內(nèi)存在,是因?yàn)?$GLOBALS 是一個(gè)超全局變量。以下范例顯示了超全局變量的用處:

例子 12-3.,演示超全局變量和作用域的例子,代碼如下:

  1. <?php 
  2. function test_global() 
  3.    // 大多數(shù)的預(yù)定義變量并不 "super",它們需要用 'global' 關(guān)鍵字來使它們在函數(shù)的本地區(qū)域中有效。 
  4.    global $HTTP_POST_VARS
  5.    print $HTTP_POST_VARS['name']; 
  6.    // Superglobals 在任何范圍內(nèi)都有效,它們并不需要 'global' 聲明。Superglobals 是在 PHP 4.1.0 引入的。 
  7.    print $_POST['name']; 
  8. ?> 

使用靜態(tài)變量

變量范圍的另一個(gè)重要特性是靜態(tài)變量(static variable)。靜態(tài)變量僅在局部函數(shù)域中存在,但當(dāng)程序執(zhí)行離開此作用域時(shí),其值并不丟失??纯聪旅娴睦樱?/p>

例子12-4. 演示需要靜態(tài)變量的例子,代碼如下:

  1. <?php 
  2. function Test () 
  3.    $a = 0; 
  4.    echo $a
  5.    $a++; 
  6. ?> 

本函數(shù)沒什么用處,因?yàn)槊看握{(diào)用時(shí)都會(huì)將 $a 的值設(shè)為 0 并輸出 "0"。將變量加一的 $a++ 沒有作用,因?yàn)橐坏┩顺霰竞瘮?shù)則變量 $a 就不存在了。要寫一個(gè)不會(huì)丟失本次計(jì)數(shù)值的計(jì)數(shù)函數(shù),要將變量 $a 定義為靜態(tài)的:

例子 12-5,使用靜態(tài)變量的例子:

  1. <?php 
  2. function Test() 
  3.    static $a = 0; 
  4.    echo $a
  5.    $a++; 
  6. ?> 

現(xiàn)在,每次調(diào)用 Test() 函數(shù)都會(huì)輸出 $a 的值并加一。

靜態(tài)變量也提供了一種處理遞歸函數(shù)的方法。遞歸函數(shù)是一種調(diào)用自己的函數(shù)。寫遞歸函數(shù)時(shí)要小心,因?yàn)榭赡軙?huì)無窮遞歸下去。必須確保有充分的方法來中止遞歸。一下這個(gè)簡單的函數(shù)遞歸計(jì)數(shù)到 10,使用靜態(tài)變量 $count 來判斷何時(shí)停止:

例子 12-6,靜態(tài)變量與遞歸函數(shù),代碼如下:

  1. <?php 
  2. function Test() 
  3.    static $count = 0; 
  4.    $count++; 
  5.    echo $count
  6.    if ($count < 10) { 
  7.    Test (); 
  8.    } 
  9.    $count--; 
  10. ?> 

注: 靜態(tài)變量可以按照上面的例子聲明。如果在聲明中用表達(dá)式的結(jié)果對(duì)其賦值會(huì)導(dǎo)致解析錯(cuò)誤。

例子 12-7.聲明靜態(tài)變量,代碼如下:

  1. <?php 
  2. function foo(){ 
  3.    static $int = 0; // correct 
  4.    static $int = 1+2; // wrong (as it is an expression) 
  5.    static $int = sqrt(121); // wrong (as it is an expression too) 
  6.    $int++; 
  7.    echo $int
  8. ?> 

注意有朋友問我全局靜態(tài)變量 ,在php中沒有全局變量這一說活,php是一種解釋型的語言,雖然有static修飾符,但意思與.Net中的完全不一樣。

即使把類中的一個(gè)變量聲明為static,這個(gè)變量也只在當(dāng)前頁面級(jí)的應(yīng)用程序域中有效。

2、理解變量作用域。

在方法體外聲明的變量,在方法體內(nèi)是訪問不到的。實(shí)例代碼如下:

  1. <?php    
  2.   $url = "www.phpfensi.com";    
  3.   function _DisplayUrl()    
  4.   {    
  5.       echo $url;    
  6.   }    
  7.   function DisplayUrl()    
  8.   {    
  9.     global $url;    
  10.     echo $url;    
  11.   }    
  12.   _DisplayUrl();    
  13.   DisplayUrl();    
  14. ?>  
  15. <?php 
  16.   $url = "www.phpfensi.com"
  17.   function _DisplayUrl() 
  18.   { 
  19.       echo $url
  20.   } 
  21.   function DisplayUrl() 
  22.   { 
  23.     global $url
  24.     echo $url
  25.   } 
  26.   _DisplayUrl(); 
  27.   DisplayUrl(); 
  28. ?> 

_DisplayUrl方法是不會(huì)顯示任何結(jié)果,因?yàn)樽兞?url在方法體_DisplayUrl中是無法訪問的,在$url前加上global即可,如DisplayUrl方法。

在方法體中定義的global變量可以在方法體外訪問,代碼如下:

  1. <?php    
  2.   function _DisplayUrl()    
  3.   {    
  4.       global $myName;    
  5.       $myName='yibin';    
  6.   }    
  7.       
  8.   _DisplayUrl();    
  9.   echo $myName;  //output yibin    
  10. ?>  
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 亚洲综合三区 | 国产精品高清一区二区 | 一区二区国产在线播放 | 精品国产一区二区三区www | 亚洲天天综合 | 五月婷婷丁香综合 | 精品国产亚洲一区二区三区 | 国产成人综合久久精品红 | 久久久久777777人人人视频 | 国产性tv国产精品 | 视频免费在线 | 国产精品久久久久久久久久免费 | 午夜久久久久久 | 手机在线看片国产 | 综合欧美日韩一区二区三区 | 国产亚洲一区二区三区在线 | vvideos欧美极度另类 | a黄色片| 亚洲精品久久久久综合网 | 国产精品国产亚洲精品看不卡 | 精品一区二区三区四区乱码 | 91成人免费福利网站在线 | 宇都宫紫苑乳在线观看 | 国产午夜精品一区二区三区不卡 | 欧美一级日韩一级 | 男女性免费视频观看 | 一级坐爱| 欧美性videos高清精品 | 午夜免费啪啪 | 久久精品免费i 国产 | 免费看一级欧美毛片 | 亚洲图片校园另激情类小说 | 亚洲人成网站在线播放942一 | 波多野结衣一级视频 | 图片区偷拍区小说区 | 亚洲色图男人天堂 | 精品一区二区三区免费视频 | 中文字幕第二区 | 毛片免费在线播放 | 女性一级全黄生活片在线播放 | 欧美亚洲尤物久久精品 |