0

PHP の名前空間について質問があります。

このコードは機能しません:

<?php
namespace My\Functions\Printing;

class A {
    public function __construct() {
        echo __NAMESPACE__;
    }
}


namespace My;
use My\Functions\Printing\A as A;


$obj=new namespace\A();

しかし、これはうまくいきます:

<?php
namespace My\Functions\Printing;

class A {
    public function __construct() {
        echo __NAMESPACE__;
    }
}


namespace My;
use My\Functions\Printing\A as A;


$obj=new A();

名前空間のインポートの動作に関する詳細情報を入手したいと思います。インポートされたクラスが、インポートされた名前空間でアクセスできないのはなぜですか?

4

3 に答える 3

1

おそらく、「使用」の使用について混乱した考えを持っているでしょう。キーワード「namespace」は、現在のネームスペースを参照します

namespace My\Functions\Printing;

class A {
    public function __construct() {
        echo __NAMESPACE__;
    }
}

namespace My;
use My\Functions\Printing\A;
use My\Functions\Printing\A as myAlias;

$obj=new namespace\A(); // instance of  \My\A (doesn't exist)
$obj2=new A(); // instance of  \My\Functions\Printing\A
$obj3=new myAlias(); // instance of  \My\Functions\Printing\A

いつものように、完全な詳細についてはドキュメントを参照してください: php doc

于 2012-07-13T10:31:54.963 に答える
0

My\Functions\Printing 名前空間は次のようになります

-- My\Functions\Printing

インポート前の「私の」名前空間は次のようになります。

- じぶんの

インポート後の「私の」名前空間は次のようになります(私は思う)

- じぶんの

では、なぜ My\A にアクセスできないのでしょうか?

名前空間の構造は、「名前空間構造」の前に「名前空間インポート領域」でPHPコンパイラチェックを変更していないと思います。

ドキュメントは、名前空間がファイルシステムのように見えることを指定していますが、それは誤りです。

他のクラスのインポートが「シンボリック リンクの作成」である場合、現在の名前空間からアクセスできる必要があります。作成されたディレクトリまたは絶対パスからシンボリック リンクにアクセスできますが、インポートされたクラスに新しいパスでアクセスすることはできません。(\私のA)

なんで ?

于 2012-07-13T15:58:26.793 に答える
0

よくわかりませんが、名前空間キーワードの使用に問題があると思います。

http://www.php.net/manual/pl/language.namespaces.nsconstants.php

最初の例では、あなたは My 名前空間にいるのでnamespace\A()==My\My\Functions\Printing\A()

于 2012-07-13T10:11:52.263 に答える