5

「use」キーワードを使用してクラスをグローバル名前空間にあるかのように動作させる方法があるかどうか疑問に思っているだけなので、このクラスはクラスの外部からのみ名前空間付きのクラスとして動作します。何かのようなもの:

namespace wherever\somewhere\deep\deep\inside;
use \; // root namespace.. note: this doesn't work
class stuff{
//....
}

誰でも?

4

3 に答える 3

19

グローバル名前空間を使用しても、期待どおりには機能しません。

デフォルトでは、バックスラッシュを追加することで、グローバルに名前空間を持つクラスを参照できます (例: $x = new \PDO(...);. しようとしてuse \も変わらない。

グローバルに名前空間が設定されたクラスからバックスラッシュを削除する場合は、それぞれを個別に削除する必要がありますuse。名前空間付きの PHP では、名前空間を持たないクラス参照は、useステートメントで明示的に参照されない限り、現在の名前空間にあると見なされます。

例えば:

use \PDO, \SplFileObject;

これで、バックスラッシュなしで呼び出すことができnew PDO(...)ます。new SplFileObject()ただし、 に含まれていない他のグローバル クラスにはuse、バックスラッシュが必要です。

于 2013-01-08T12:14:23.327 に答える
2

私はあなたができるとは思わない。誰かが良い方法を見つけたら、共有してください。以下を試してみましたが、明らかにうまくいきませんでした(記事はここにあります http://www.siteconsortium.com/h/D0000H.php)。多くのレガシー コードは名前空間を使用しないため、この方法でルート名前空間に移動できると非常に便利です。

$root = \_\_NAMESPACE\_\_;   // error 

namespace AA; 
function foo() { print " What AA "; }

use ($root);      // error

namespace $root;  // error can't use var

namespace ""; // error

use "/"; // error

namespace "/";   // error

ここにはいくつかの異なる問題があります。一つ変だと思ったのは、キーワードは使えるのにキーワードrequire_once $script_nameが使えないことnamespace $namespace_nameです。

于 2014-01-09T00:43:15.717 に答える