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

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁(yè) > php開(kāi)源 > php教程 > PHP中g(shù)lobal全局變量的作用范圍

PHP中g(shù)lobal全局變量的作用范圍

來(lái)源:程序員人生   發(fā)布時(shí)間:2014-02-07 07:49:53 閱讀次數(shù):3637次

最近在開(kāi)發(fā)一個(gè)Discuz!插件,今天遇到一個(gè)問(wèn)題,我在后臺(tái)的一個(gè)函數(shù)中調(diào)用插件的變量數(shù)據(jù)時(shí)返回空值,測(cè)試幾次無(wú)果后突然想起應(yīng)該是沒(méi)有加載緩存導(dǎo)致的,于是加入了loadcache('plugin')加載插件緩存,可是問(wèn)題依舊。

分析一下問(wèn)題,需要調(diào)用到到數(shù)據(jù)的是一個(gè)函數(shù)(暫且稱(chēng)為函數(shù)A),已經(jīng)執(zhí)行了global $_G;以調(diào)用全局變量,而且通過(guò)print_r輸出$_G也證實(shí)$_G中是有數(shù)據(jù)的,缺失的是插件緩存。而函數(shù)A在前臺(tái)也要調(diào)用,因?yàn)榍芭_(tái)套了plugin.php的外殼,已經(jīng)加載插件緩存,不需要執(zhí)行l(wèi)oadcache('plugin'),因此在函數(shù)中執(zhí)行l(wèi)oadcache('plugin')操作對(duì)執(zhí)行效率有影響。

再次分析問(wèn)題,后臺(tái)調(diào)用函數(shù)A的代碼則在另一個(gè)函數(shù)中(暫且稱(chēng)為函數(shù)B),突然在想,會(huì)不會(huì)要在這個(gè)函數(shù)里執(zhí)行一次global $_G;好讓后臺(tái)加載的變量?jī)?nèi)容由函數(shù)B傳遞給函數(shù)A?

抱著試一試的態(tài)度,我在函數(shù)B中也添加了global $_G;,結(jié)果成功了!

這引申出了一個(gè)global作用域的作用范圍的問(wèn)題。在我這次調(diào)試中,函數(shù)A因?yàn)橛珊瘮?shù)B調(diào)用,因此后臺(tái)中調(diào)用的loadcache('plugin');所生成的新$_G只在后臺(tái)部分有效,而函數(shù)B中由于沒(méi)有使用global $_G,因此并未獲取到最新的$_G。而函數(shù)A的文件引用(require)我寫(xiě)在了函數(shù)B中,函數(shù)A成了函數(shù)B的一個(gè)子集,后臺(tái)代碼中運(yùn)行過(guò)loadcache的全局變量對(duì)函數(shù)A無(wú)效,函數(shù)A中的global取得的$_G值繞開(kāi)了我所寫(xiě)的loadcache。因此需要在函數(shù)B中運(yùn)行一次global獲得最新的$_G值才能在函數(shù)A中生效。

下面是一個(gè)使用“global”關(guān)鍵字的演示例子:

  1. <?php 
  2. $my_var = 'Hello World'
  3. test_global(); 
  4. function test_global() { 
  5.     // Now in local scope 
  6.      // the $my_var variable doesn't exist 
  7.      // Produces error: "Undefined variable: my_var" 
  8.     echo $my_var
  9.     // Now let's important the variable 
  10.     global $my_var
  11.     // Works: 
  12.     echo $my_var
  13. ?> 

正如你在上面的例子中看到的一樣,“global”關(guān)鍵字是用來(lái)導(dǎo)入全局變量的,看起來(lái)它工作的很好,而且很簡(jiǎn)單,那么為什么我們還要擔(dān)心使用“global”關(guān)鍵字來(lái)定義全局?jǐn)?shù)據(jù)呢?

我來(lái)給處入行的人講解一下全局變量global的使用,”全局變量“,這個(gè)名詞中的全局兩個(gè)字已經(jīng)告訴我們這個(gè)變量在各個(gè)地方都能用,先看一個(gè)實(shí)例:

  1. <?php 
  2. $a = 1; 
  3. $b = 2; 
  4. function Sum() 
  5.     global $a$b//在里面聲明為全局變量 
  6.     $b = $a + $b
  7. Sum(); 
  8. echo $b
  9. ?> 

結(jié)果: 3

如果沒(méi)有全局變量global在方法內(nèi)是不能獲得$a,$b值的,所以在方法里面想用外面的變量就需要先聲明這個(gè)變量為全局變量,這樣就可以使用了,很方便吧,代碼如下:

  1. <?PHP 
  2.      $w3sky = 1; 
  3.      $w3sky2 = 2; 
  4. unction Sum() 
  5.       { 
  6.       global $w3sky$w3sky2;$w3sky2 = $w3sky + $w3sky2
  7.       }Sum(); 
  8.       echo $w3sky2
  9. ?> 

以上腳本的輸出將是“3”,在函數(shù)中申明了全局變量 $w3sky 和 $w3sky2,任何變量的所有引用變量都會(huì)指向到全局變量.

生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 国产成人三级经典中文 | 爱爱网网站免费观看 | 国产欧美一区二区精品久久久 | 国产亚洲精品精品国产亚洲综合 | 日韩在线一区二区三区视频 | 国产成人精品一区二区三区 | 国产精品久久久久久久久夜色 | 中文字幕校园春色 | 免费成年人在线观看视频 | 久久久久777777人人人视频 | 欧美一级爱爱 | 亚洲综合在线观看视频 | 在线观看亚洲天堂 | 亚洲国产精品a在线 | 日韩不卡一区二区三区 | 国产成人免费手机在线观看视频 | 欧美在线 | 欧美 | 亚洲三级自拍 | 波多野结衣178部中文字幕 | 亚洲国产精品高清在线一区 | 国产日韩精品欧美一区喷 | 久久久久这里只有精品 | 视频在线观看高清免费 | 国产视频久久久久 | 国产成人久久综合漫画 | 精品视频亚洲 | 亚洲精品国产啊女成拍色拍 | 中文字幕在线观看2022 | 久久久精品3d动漫一区二区三区 | 欧美成人一区二区三区不卡视频 | 中文字幕乱码人成乱码在线视频 | 国内视频一区二区 | 国产一区二区三区高清 | 亚洲人成网站观看在线观看 | japanese日本护士xx在线 | 亚洲高清视频一区 | 国产老肥妇视频 | 欧美一区永久视频免费观看 | 免费看亚洲 | 中文字幕在线观看网站 | 亚洲精品视频在线 |