亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

PHP語言中g(shù)lobal和$GLOBALS[]的分析 之二

 更新時間:2012年02月02日 17:03:25   作者:  
PHP語言中g(shù)lobal和$GLOBALS[]的分析 之二,需要的朋友可以參考下
還是借用上一篇的例子:

PHP代碼
復(fù)制代碼 代碼如下:

<?php
// 例子1
function test_global() {
global $var1, $var2;
$var2 =& $var1;
}
function test_globals() {
$GLOBALS['var3'] =& $GLOBALS['var1'];
}
$var1 = 5;
$var2 = $var3 = 0;
test_global();
print $var2 .”\n”;
test_globals();
print $var3 .”\n”;
?>

執(zhí)行結(jié)果為:
0
5
怎么會這樣呢?不應(yīng)該是2個5嗎?怎么會出現(xiàn)1個0和1個5呢?

恩,我們保留以上問題,深入分析$GLOBALS和global的原理!
我們都知道變量其實是相應(yīng)物理內(nèi)存在代碼中的”代號”而已
引用php手冊的$GLOBALS的解釋:
Global 變量:$GLOBALS,注意: $GLOBALS 在 PHP 3.0.0 及以后版本中適用。
由所有已定義全局變量組成的數(shù)組。變量名就是該數(shù)組的索引。這是一個“superglobal”,或者可以描述為自動全局變量。
也就是說上面代碼中的$var1和$GLOBALS['var1']是指的同一變量,而不是2個不同的變量!
下面來分析global到底做了什么?
引用php手冊的global的解釋:
如果在一個函數(shù)內(nèi)部給一個聲明為 global 的變量賦于一個引用,該引用只在函數(shù)內(nèi)部可見??梢酝ㄟ^使用 $GLOBALS 數(shù)組避免這一點。
我們都知道php中的函數(shù)所產(chǎn)生的變量都是函數(shù)的私有變量,那么global關(guān)鍵字產(chǎn)生的變量也肯定逃不出這個規(guī)則,為什么這么說呢,看下面的代碼:
PHP代碼
復(fù)制代碼 代碼如下:

<?php
// 例子2
function test() {
global $a;
unset($a);
}
$a = 1;
test();
print $a;
?>

執(zhí)行結(jié)果為:
1
為什么會輸出1呢?不是已經(jīng)把$a給unset了嗎?unset失靈了?php的bug?
都不是,其實unset起作用了,是把test函數(shù)中的$a給unset掉了,可以在函數(shù)test()中加入
print $a;
來測試!
接著回到上面的例子1,看test_global中的這一代碼“$var2 =& $var1;”,上面是一個引用賦值運算,也就是$var2將指向var1所指向的物理內(nèi)存地址,所以例子1執(zhí)行過test_global函數(shù)以后,變量的變化只在函數(shù)的局部產(chǎn)生效應(yīng),在函數(shù)外部$var2的指向物理內(nèi)存地址并沒有變化,還是它自己.
此時,就能理解為什么例子1執(zhí)行完以后,$var2是0,而$var3是5了!
所以我們得出一個結(jié)論,在函數(shù)中g(shù)lobal和$GLOBALS[]的區(qū)別在于:
global在函數(shù)產(chǎn)生一個指向函數(shù)外部變量的別名變量,而不是真正的函數(shù)外部變量,一但改變了別名變量的指向地址,就會發(fā)生一些意料不到情況,例如例子 1.
$GLOBALS[]確確實實調(diào)用是外部的變量,函數(shù)內(nèi)外會始終保持一致
可以對照 下面兩個列子再加深下印象:
global:
復(fù)制代碼 代碼如下:

<?php
function myfunction(){
global $bar;
unset($bar);
}
$bar=”someting”;
myfunction();
echo $bar;
?>

輸出:someting
$GLOBALS[]:
復(fù)制代碼 代碼如下:

<?php
function foo()
{
unset($GLOBALS['bar']);
}
$bar = “something”;
foo();
echo $bar;
?>

輸出:空
當(dāng)按照上面的思路理解后,碰到下面的情況是不是又有些暈?zāi)?
復(fù)制代碼 代碼如下:

<?php
$a = 1;
$b = 2;
function Sum()
{
global $a, $b;
$b = $a + $b;
}
Sum();
echo $b;
?>

輸出將是 “3″。在函數(shù)中申明 了全局變量 $a 和 $b,任何變量的所有引用變量都會指向到全局變量。
怎么不是2呢,在函數(shù)外部不是不影響嗎,請注意$b在函數(shù)中并沒有通過引用修改,而是修改的$b指向物理內(nèi)存的值,因此外部輸入為3。

相關(guān)文章

  • php實現(xiàn)與erlang的二進(jìn)制通訊實例解析

    php實現(xiàn)與erlang的二進(jìn)制通訊實例解析

    這篇文章主要介紹了php實現(xiàn)與erlang的二進(jìn)制通訊實例解析,需要的朋友可以參考下
    2014-07-07
  • php多進(jìn)程應(yīng)用場景實例詳解

    php多進(jìn)程應(yīng)用場景實例詳解

    這篇文章主要介紹了php多進(jìn)程應(yīng)用,結(jié)合具體實例形式詳細(xì)分析了php多進(jìn)程模塊依賴pcntl擴(kuò)展安裝、使用相關(guān)操作技巧與注意事項,需要的朋友可以參考下
    2019-07-07
  • php使用mysqli和pdo擴(kuò)展,測試對比連接mysql數(shù)據(jù)庫的效率完整示例

    php使用mysqli和pdo擴(kuò)展,測試對比連接mysql數(shù)據(jù)庫的效率完整示例

    這篇文章主要介紹了php使用mysqli和pdo擴(kuò)展,測試對比連接mysql數(shù)據(jù)庫的效率,結(jié)合完整實例形式對比分析了php分別使用mysqli和pdo擴(kuò)展連接mysql數(shù)據(jù)庫的執(zhí)行時間,需要的朋友可以參考下
    2019-05-05
  • php四種定界符詳解

    php四種定界符詳解

    本文主要介紹了php四種定界符,具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • PHP使用gmdate實現(xiàn)將一個UNIX 時間格式化成GMT文本的方法

    PHP使用gmdate實現(xiàn)將一個UNIX 時間格式化成GMT文本的方法

    這篇文章主要介紹了PHP使用gmdate實現(xiàn)將一個UNIX 時間格式化成GMT文本的方法,實例分析了php中g(shù)mdate函數(shù)的功能及使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • php正則刪除img標(biāo)簽的方法示例

    php正則刪除img標(biāo)簽的方法示例

    這篇文章主要介紹了php正則刪除img標(biāo)簽的方法,結(jié)合具體實例形式分析了php針對img標(biāo)簽正則匹配相關(guān)操作技巧,需要的朋友可以參考下
    2017-05-05
  • PHP常量及變量區(qū)別原理詳解

    PHP常量及變量區(qū)別原理詳解

    這篇文章主要介紹了PHP常量及變量區(qū)別原理詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • PHP項目多語言配置平臺實現(xiàn)過程解析

    PHP項目多語言配置平臺實現(xiàn)過程解析

    這篇文章主要介紹了PHP項目多語言配置平臺實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • php備份數(shù)據(jù)庫類分享

    php備份數(shù)據(jù)庫類分享

    本文實例講述了php實現(xiàn)MySQL數(shù)據(jù)庫備份類。分享給大家供大家參考。具體分析如下:這是一個非常簡單的利用php來備份mysql數(shù)據(jù)庫的類文件,我們只要簡單的配置好連接地址用戶名與數(shù)據(jù)庫即可
    2015-04-04
  • php生成數(shù)字字母的驗證碼圖片

    php生成數(shù)字字母的驗證碼圖片

    本文給大家分享的是使用php實現(xiàn)的生成包含數(shù)字字母的驗證碼圖片的代碼,十分的簡單實用,有需要的小伙伴可以參考下
    2015-07-07

最新評論