PHP 5.3 の重要な新機能は名前空間です。
この機能は PHP5.0x で提案されましたが、後にキャンセルされ、PHP6 で実装される予定でした。今回も PHP 5.3 が「予定より前倒し」でリリースされましたが、これは開発者が PHP 5.3 を非常に重視しており、慎重であることを示しています。
正式にリリースされた時点ではドキュメントの内容が古くなっている可能性があるため、ここで名前空間の使用法を簡単に説明します。 まず、名前空間を宣言し、クラス ファイルに含める必要がある新しいキーワード名前空間を追加します。
12345678 ログイン後にコピー | <span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,0)"><?php</SPAN> namespace Project<SPAN style="COLOR: rgb(51,153,51)">::</SPAN><SPAN style="COLOR: rgb(0,64,0)">Module</SPAN><SPAN style="COLOR: rgb(51,153,51)">;</SPAN> <SPAN style="FONT-WEIGHT: bold; COLOR: rgb(0,0,0)">class</SPAN> User <SPAN style="COLOR: rgb(0,153,0)">{</SPAN> <SPAN style="FONT-WEIGHT: bold; COLOR: rgb(0,0,0)">const</SPAN> STATUS_OK <SPAN style="COLOR: rgb(51,153,51)">=</SPAN> <SPAN style="FONT-WEIGHT: bold; COLOR: rgb(0,0,0)">true</SPAN><SPAN style="COLOR: rgb(51,153,51)">;</SPAN> <SPAN style="FONT-WEIGHT: bold; COLOR: rgb(0,0,0)">function</SPAN> register<SPAN style="COLOR: rgb(0,153,0)">(</SPAN><SPAN style="COLOR: rgb(0,0,136)">$data</SPAN><SPAN style="COLOR: rgb(0,153,0)">)</SPAN> <SPAN style="COLOR: rgb(0,153,0)">{</SPAN> <SPAN style="COLOR: rgb(51,153,51)">...</SPAN> <SPAN style="COLOR: rgb(0,153,0)">}</SPAN> <SPAN style="COLOR: rgb(51,153,51)">...</SPAN> <SPAN style="COLOR: rgb(0,153,0)">}</SPAN> <SPAN style="FONT-WEIGHT: bold; COLOR: rgb(0,0,0)">?></span> ログイン後にコピー |
次に、コントローラー (おそらく他のファイル) で次のように呼び出すことができます
12 ログイン後にコピー ログイン後にコピー ログイン後にコピー | rrreえー |
さすがに違いますね通常と変わりませんが、2 つの独立したクラスを接続できます。たとえば、
<span style="COLOR: rgb(0,0,136)">$user</span> <span style="COLOR: rgb(51,153,51)">=</span> <span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,0)">new</span> Project<span style="COLOR: rgb(51,153,51)">::</span><span style="COLOR: rgb(0,64,0)">Module</span><span style="COLOR: rgb(51,153,51)">::</span><span style="COLOR: rgb(0,64,0)">User</span><span style="COLOR: rgb(0,153,0)">(</span><span style="COLOR: rgb(0,153,0)">)</span><span style="COLOR: rgb(51,153,51)">;</span> <span style="COLOR: rgb(0,0,136)">$user</span><span style="COLOR: rgb(51,153,51)">-></span><span style="COLOR: rgb(0,64,0)">register</span><span style="COLOR: rgb(0,153,0)">(</span><span style="COLOR: rgb(0,0,136)">$register_info</span><span style="COLOR: rgb(0,153,0)">)</span><span style="COLOR: rgb(51,153,51)">;</span> ログイン後にコピー | 12 ログイン後にコピー ログイン後にコピー ログイン後にコピー |
これにより、変数とクラスの間の関係を言語自体から簡単に説明して理解できるようになり、Project_Module_Blog の「伝統的な」長い命名方法が回避されます。
上記の説明では、名前空間を使用する利点を説明するのが難しいかもしれません。新しく追加された と をキーワードとして使用すると、問題をよりよく説明できるかもしれません。および as ステートメントを使用すると、名前空間の「エイリアス」を参照および宣言できます。たとえば、上記のコントローラーでクラスをインスタンス化するコードは、次のように記述できます
Project<span style="COLOR: rgb(51,153,51)">::</span><span style="COLOR: rgb(0,64,0)">Module</span><span style="COLOR: rgb(51,153,51)">::</span><span style="COLOR: rgb(0,64,0)">User</span><span style="COLOR: rgb(51,153,51)">;</span> Project<span style="COLOR: rgb(51,153,51)">::</span><span style="COLOR: rgb(0,64,0)">Module</span><span style="COLOR: rgb(51,153,51)">::</span><span style="COLOR: rgb(0,64,0)">Blog</span><span style="COLOR: rgb(51,153,51)">;</span> ログイン後にコピー | 123 ログイン後にコピー ログイン後にコピー ログイン後にコピー |
または
use Project<span style="COLOR: rgb(51,153,51)">::</span><span style="COLOR: rgb(0,64,0)">Module</span><span style="COLOR: rgb(51,153,51)">;</span> <span style="COLOR: rgb(0,0,136)">$user</span> <span style="COLOR: rgb(51,153,51)">=</span> <span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,0)">new</span> Module<span style="COLOR: rgb(51,153,51)">::</span><span style="COLOR: rgb(0,64,0)">User</span><span style="COLOR: rgb(0,153,0)">(</span><span style="COLOR: rgb(0,153,0)">)</span><span style="COLOR: rgb(51,153,51)">;</span> <span style="COLOR: rgb(0,0,136)">$user</span><span style="COLOR: rgb(51,153,51)">-></span><span style="COLOR: rgb(0,64,0)">register</span><span style="COLOR: rgb(0,153,0)">(</span><span style="COLOR: rgb(0,0,136)">$register_info</span><span style="COLOR: rgb(0,153,0)">)</span><span style="COLOR: rgb(51,153,51)">;</span> ログイン後にコピー | 123 ログイン後にコピー ログイン後にコピー ログイン後にコピー |
クラス定数では次のこともできます名前空間を通じてアクセスできます。たとえば、上記のクラスの STATUS_OK は、名前空間
use Project<span style="COLOR: rgb(51,153,51)">::</span><span style="COLOR: rgb(0,64,0)">Module</span><span style="COLOR: rgb(51,153,51)">::</span><span style="COLOR: rgb(0,64,0)">User</span> <span style="COLOR: rgb(177,177,0)">as</span> ModuleUser<span style="COLOR: rgb(51,153,51)">;</span> <span style="COLOR: rgb(0,0,136)">$user</span> <span style="COLOR: rgb(51,153,51)">=</span> <span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,0)">new</span> ModuleUser<span style="COLOR: rgb(51,153,51)">;</span> <span style="COLOR: rgb(0,0,136)">$user</span><span style="COLOR: rgb(51,153,51)">-></span><span style="COLOR: rgb(0,64,0)">register</span><span style="COLOR: rgb(0,153,0)">(</span><span style="COLOR: rgb(0,0,136)">$register_info</span><span style="COLOR: rgb(0,153,0)">)</span><span style="COLOR: rgb(51,153,51)">;</span> ログイン後にコピー | 1 ログイン後にコピー ログイン後にコピー |
を通じてアクセスできます。さらに、エイリアスを使用して、このような長い「変数名」を簡素化することもできます
Project<span style="COLOR: rgb(51,153,51)">::</span><span style="COLOR: rgb(0,64,0)">Module</span><span style="COLOR: rgb(51,153,51)">::</span><span style="COLOR: rgb(0,64,0)">User</span><span style="COLOR: rgb(51,153,51)">::</span><span style="COLOR: rgb(0,64,0)">STATUS_OK</span> ログイン後にコピー | 12 ログイン後にコピー ログイン後にコピー ログイン後にコピー |
ところで、「グローバル名前空間」の概念について触れてみましょう。いわゆる「ハイパースペース」とは、指定された名前空間を持たない変数、クラス、関数を指します。たとえば、
use Project<span style="COLOR: rgb(51,153,51)">::</span><span style="COLOR: rgb(0,64,0)">Module</span><span style="COLOR: rgb(51,153,51)">::</span><span style="COLOR: rgb(0,64,0)">User</span><span style="COLOR: rgb(51,153,51)">::</span><span style="COLOR: rgb(0,64,0)">STATUS_OK</span> as STATUS_OK; echo STATUS_OK; ログイン後にコピー | 123 ログイン後にコピー ログイン後にコピー ログイン後にコピー |
のような関数は、foo() または ::foo(); を使用して実行できます。
最後に、autoload関数を使用して、指定された名前空間にクラスをロードします。簡単な関数は以下の通りです
<span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,0)">function</span> foo<span style="COLOR: rgb(0,153,0)">(</span><span style="COLOR: rgb(0,153,0)">)</span> <span style="COLOR: rgb(0,153,0)">{</span> <span style="COLOR: rgb(51,153,51)">...</span> <span style="COLOR: rgb(0,153,0)">}</span> ログイン後にコピー | 12345 ログイン後にコピー |
このように、例えば
<span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,0)">function</span> __autoload<span style="COLOR: rgb(0,153,0)">(</span> <span style="COLOR: rgb(0,0,136)">$classname</span> <span style="COLOR: rgb(0,153,0)">)</span> <span style="COLOR: rgb(0,153,0)">{</span> <span style="COLOR: rgb(0,0,136)">$classname</span> <span style="COLOR: rgb(51,153,51)">=</span> <span style="COLOR: rgb(153,0,0)">strtolower</span><span style="COLOR: rgb(0,153,0)">(</span> <span style="COLOR: rgb(0,0,136)">$classname</span> <span style="COLOR: rgb(0,153,0)">)</span><span style="COLOR: rgb(51,153,51)">;</span> <span style="COLOR: rgb(0,0,136)">$classname</span> <span style="COLOR: rgb(51,153,51)">=</span> <span style="COLOR: rgb(153,0,0)">str_replace</span><span style="COLOR: rgb(0,153,0)">(</span> <span style="COLOR: rgb(0,0,255)">'::'</span><span style="COLOR: rgb(51,153,51)">,</span> DIRECTORY_SEPARATOR<span style="COLOR: rgb(51,153,51)">,</span> <span style="COLOR: rgb(0,0,136)">$classname</span> <span style="COLOR: rgb(0,153,0)">)</span><span style="COLOR: rgb(51,153,51)">;</span> <span style="COLOR: rgb(177,177,0)">require_once</span><span style="COLOR: rgb(0,153,0)">(</span> <span style="COLOR: rgb(153,0,0)">dirname</span><span style="COLOR: rgb(0,153,0)">(</span> <span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,0)">__FILE__</span> <span style="COLOR: rgb(0,153,0)">)</span> <span style="COLOR: rgb(51,153,51)">.</span> <span style="COLOR: rgb(0,0,255)">'/'</span> <span style="COLOR: rgb(51,153,51)">.</span> <span style="COLOR: rgb(0,0,136)">$classname</span> <span style="COLOR: rgb(51,153,51)">.</span> <span style="COLOR: rgb(0,0,255)">'.class.php'</span> <span style="COLOR: rgb(0,153,0)">)</span><span style="COLOR: rgb(51,153,51)">;</span> <span style="COLOR: rgb(0,153,0)">}</span> ログイン後にコピー | 1 ログイン後にコピー ログイン後にコピー |
を呼び出すと自動的にプロジェクトをロードできます_Module _User.class.php ファイル
」