Do You PHP はてブロ

Do You PHPはてなからはてブロに移動しました

Namespaces FAQ

via. Namespaces FAQ « PHP 10.0 Blog

RADME.namespaceをFAQ形式でまとめたもののようですね。さっくり訳してみましたので、間違いがあれば指摘してください。

Q. なぜPHP名前空間が必要なの?
A. PEAR_Form_Loader_Validate_Table_Element_Validator_Exceptionみたいな長い名前はうんざりするから

Q. 名前空間の実装の主なゴールは?
A. 上記の問題を解決すること

Q. "namespace X::Y::Z" はどういう意味になる?
A: 1. 全てのクラス・関数・メソッドに X::Y::Z という接頭辞が付くようになる
2. 全てのクラス・関数・メソッドの名前は、まず X::Y::Z が解決されるようになる

Q. "import X::Y::Z as Foo" って何?
A. クラス・関数の名前もしくは接頭辞として、常にFooを使用することができる。実際には、X::Y::Z を意味する

Q. "import X::Y::Z" って何?
A. "import X::Y::Z as Z"と等価。上記参照。

Q. "import Foo" って何?
A. 何もしない

Q. 名前空間とimportのスコープとは?
A. 現在のファイルになる

Q. 同じ名前空間を複数のファイルで使える?
A. 使える

Q. 名前空間 X::Y::Z と X::Y で何らかの関連がある?
A. プログラマーの頭の中にだけある

Q. 名前空間 X::Y::Z に属する全てのクラスをグローバル空間にどうimportするの?
A. グローバル空間の汚染問題に立ち戻っちゃうから、やっちゃダメ。代わりに X::Y::Z をimportして、Z:: をクラスの接頭辞にすればいい

Q. でも、長い名前を使い続けちゃダメって事じゃないよね?
A. [名前空間]::[クラス]::[要素] のような3要素より長いのはダメ

Q. なぜ、[あなたの好きな言語をここに入れてね]みたいな実装じゃないの?
A. それは、PHPは[あなたの好きな言語をここに入れてね]じゃないから ;)