「use」キーワードを使用してクラスをグローバル名前空間にあるかのように動作させる方法があるかどうか疑問に思っているだけなので、このクラスはクラスの外部からのみ名前空間付きのクラスとして動作します。何かのようなもの:
namespace wherever\somewhere\deep\deep\inside;
use \; // root namespace.. note: this doesn't work
class stuff{
//....
}
誰でも?
「use」キーワードを使用してクラスをグローバル名前空間にあるかのように動作させる方法があるかどうか疑問に思っているだけなので、このクラスはクラスの外部からのみ名前空間付きのクラスとして動作します。何かのようなもの:
namespace wherever\somewhere\deep\deep\inside;
use \; // root namespace.. note: this doesn't work
class stuff{
//....
}
誰でも?
グローバル名前空間を使用しても、期待どおりには機能しません。
デフォルトでは、バックスラッシュを追加することで、グローバルに名前空間を持つクラスを参照できます (例: $x = new \PDO(...);
. しようとしてuse \
も変わらない。
グローバルに名前空間が設定されたクラスからバックスラッシュを削除する場合は、それぞれを個別に削除する必要がありますuse
。名前空間付きの PHP では、名前空間を持たないクラス参照は、use
ステートメントで明示的に参照されない限り、現在の名前空間にあると見なされます。
例えば:
use \PDO, \SplFileObject;
これで、バックスラッシュなしで呼び出すことができnew PDO(...)
ます。new SplFileObject()
ただし、 に含まれていない他のグローバル クラスにはuse
、バックスラッシュが必要です。
私はあなたができるとは思わない。誰かが良い方法を見つけたら、共有してください。以下を試してみましたが、明らかにうまくいきませんでした(記事はここにあります 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
です。