2012-11-20 50 views
0
<?php 
namespace Top 
{ 
    $a = "Robert"; 
    $b = "Richard"; 
    $c = "Maurice"; 
    function get_a() 
    { 
    global $a; 
    return $a; 
    } 
    function get_b() 
    { 
    global $b; 
    return $b; 
    } 
    function get_c() 
    { 
    global $c; 
    return $c; 
    } 
    echo namespace\Middle\get_a(); 
    echo namespace\Middle\Bottom\get_c(); 
    echo namespace\get_b(); 
} 

namespace Top\Middle 
{ 
    $a = "Dauraun"; 
    $b = "Khalid "; 
    $c = "Humberto"; 
    function get_a() 
    { 
     global $a; 
     return $a; 
    } 
    function get_b() 
    { 
     global $b; 
     return $b; 
    } 
    function get_c() 
    { 
     global $c; 
     return $c; 
    } 
} 

namespace Top\Middle\Bottom 
{ 
    $a = "Terry"; 
    $b = "Jesse"; 
    $c = "Chris"; 
    function get_a() 
    { 
     global $a; 
     return $a; 
    } 
    function get_b() 
    { 
     global $b; 
     return $b; 
    } 
    function get_c() 
    { 
     global $c; 
     return $c; 
    } 
} 

?>函數PHP命名空間global關鍵字

所以在上面的代碼片斷我想顯示使用功能使用與相應的命名空間,全球關鍵字但正確的變量內容,期望的結果是沒有發生。返回的變量內容是使用echo語句的命名空間的內容,而不是來自指定的命名空間。產量是「RobertMauriceRichard」。有人可以解釋嗎?也許這是我在名字空間中的函數內的'global'關鍵字的誤解?

+2

你能提供的代碼較短片段只中的相關位嗎? –

+0

並請格式化。每個縮進4個空格最好。 –

+0

@robertrocha [對我有用](http://codepad.viper-7.com/yl95SH) –

回答

1

因爲only 4 types of code are affected by namespace:類,接口,函數,常量。

因此,您的$a,$b,$cecho語句在整個文件中都可用 - 實際上是相同的。

當您撥打namespace\Middle\get_a();時,$a仍然是「羅伯特」,因此返回「羅伯特」。

嘗試把echo組分成不同的命名空間,你會看到不同的結果:

namespace Top\Middle 
{ 
    /*...*/ 
    echo \Top\Middle\get_a(); 
    echo \Top\Middle\Bottom\get_c(); 
    echo \Top\get_b(); 
} 
/* outputs "DauraunHumbertoKhalid" */ 

namespace Top\Middle\Bottom 
{ 
    /*...*/ 
    echo \Top\Middle\get_a(); 
    echo \Top\Middle\Bottom\get_c(); 
    echo \Top\get_b(); 
} 
/* outputs "TerryChrisJesse" */