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;
    }
}

?>

したがって、上記のコードスニペットでは、対応する名前空間でglobalキーワードを使用する関数を使用して正しい変数コンテンツを表示しようとしていますが、目的の結果は得られていません。返される変数の内容は、echoステートメントが使用されている名前空間の内容であり、指定された名前空間からのものではありません。出力は「RobertMauriceRichard」です。誰か説明してもらえますか?おそらく、名前空間にある関数内の「global」キーワードの私の部分の誤解ですか?

4

1 に答える 1

1

名前空間の影響を受けるのは、クラス、インターフェイス、関数、定数の4種類のコードのみであるためです。

したがって、、、、$aおよびステートメントは$b、ファイル全体で使用可能であり、実際には同じです。$cecho

を呼び出すまでnamespace\Middle\get_a();に、$aはまだ「Robert」であるため、「Robert」が返されます。

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" */
于 2012-11-20T07:56:45.933 に答える