PHP 5.3 の重要な新機能は名前空間です。
この機能は PHP5.0x で提案されましたが、後にキャンセルされ、PHP6 で実装される予定でした。今回も PHP 5.3 が「予定より前倒し」でリリースされましたが、これは開発者が PHP 5.3 を非常に重視しており、慎重であることを示しています。
正式にリリースされた時点ではドキュメントの内容が古くなっている可能性があるため、ここで名前空間の使用法を簡単に説明します。 まず、名前空間を宣言し、クラス ファイルに含める必要がある新しいキーワード名前空間を追加します。
<ol class="dp-c"><li class="alt"><span><span><?php </SPAN></SPAN><LI class=""><SPAN>namespace Project::Module; </SPAN><LI class=alt><SPAN> </SPAN><LI class=""><SPAN></SPAN><SPAN class=keyword><STRONG><FONT color=#006699>class</FONT></STRONG></SPAN><SPAN> User { </SPAN></SPAN><LI class=alt><SPAN></SPAN><SPAN class=keyword><STRONG><FONT color=#006699>const</FONT></STRONG></SPAN><SPAN> STATUS_OK = true; </SPAN></SPAN><LI class=""><SPAN> </SPAN><LI class=alt><SPAN></SPAN><SPAN class=keyword><STRONG><FONT color=#006699>function</FONT></STRONG></SPAN><SPAN> register(</SPAN><SPAN class=vars><FONT color=#dd0000>$data</FONT></SPAN><SPAN>) { </SPAN></SPAN><LI class=""><SPAN>... </SPAN><LI class=alt><SPAN>} </SPAN><LI class=""><SPAN> </SPAN><LI class=alt><SPAN>... </SPAN><LI class=""><SPAN>} </SPAN></LI></OL>
の先頭で、次にコントローラー (おそらく他のファイル) で、次のように
<OL class=dp-c><LI class=alt><SPAN><SPAN class=vars><FONT color=#dd0000>$user</FONT></SPAN><SPAN> = </SPAN><SPAN class=keyword><STRONG><FONT color=#006699>new</FONT></STRONG></SPAN><SPAN> Project::Module::User(); </SPAN></SPAN><LI class=""><SPAN></SPAN><SPAN class=vars><FONT color=#dd0000>$user</FONT></SPAN><SPAN>->register(</span><span class="vars"><font color="#dd0000">$register_info</font></span><span>); </span></span></li></ol>
を呼び出すことができます。これは確かに通常と同じですが、2 つの独立したクラスを接続できます。たとえば、
<ol class="dp-c"> <li class="alt"><span><span>Project::Module::User; </span></span></li> <li class=""><span>Project::Module::Blog; </span></li> </ol>
を使用すると、言語自体から変数とクラスの関係を簡単に説明して理解できるようになり、Project_Module_Blog の「伝統的な」長い命名方法が回避されます。
上記の説明では、名前空間を使用する利点を説明するのが難しいかもしれません。新しく追加された と as キーワードの方が問題をよりよく説明しているかもしれません。および as ステートメントを使用すると、名前空間の「エイリアス」を参照および宣言できます。たとえば、上記のコントローラーでクラスをインスタンス化するコードは次のように記述できます
<ol class="dp-c"> <li class="alt"><span><span class="keyword"><strong><font color="#006699">use</font></strong></span><span> Project::Module; </span></span></li> <li class=""> <span></span><span class="vars"><font color="#dd0000">$user</font></span><span> = </span><span class="keyword"><strong><font color="#006699">new</font></strong></span><span> Module::User(); </span> </li> <li class="alt"> <span></span><span class="vars"><font color="#dd0000">$user</font></span><span>->register(</span><span class="vars"><font color="#dd0000">$register_info</font></span><span>); </span> </li> </ol>
クラスの定数にも名前空間を通じてアクセスできます。たとえば、上記のクラスの STATUS_OK には、名前空間
<ol class="dp-c"> <li class="alt"><span><span class="keyword"><strong><font color="#006699">use</font></strong></span><span> Project::Module::User </span><span class="keyword"><strong><font color="#006699">as</font></strong></span><span> ModuleUser; </span></span></li> <li class=""> <span></span><span class="vars"><font color="#dd0000">$user</font></span><span> = </span><span class="keyword"><strong><font color="#006699">new</font></strong></span><span> ModuleUser; </span> </li> <li class="alt"> <span></span><span class="vars"><font color="#dd0000">$user</font></span><span>->register(</span><span class="vars"><font color="#dd0000">$register_info</font></span><span>); </span> </li> </ol>
。さらに、エイリアスを使用して、このような長い「変数名」を簡素化することもできます
<ol class="dp-c"><li class="alt"><span><span>Project::Module::User::STATUS_OK </span></span></li></ol>
ちなみに、「ハイパースペース (グローバル名前空間)」の概念についても触れておきます。いわゆる「ハイパースペース」とは、指定された名前空間を持たない変数、クラス、関数を指します。たとえば、関数
<ol class="dp-c"> <li class="alt"><span><span class="keyword"><strong><font color="#006699">use</font></strong></span><span> Project::Module::User::STATUS_OK </span><span class="keyword"><strong><font color="#006699">as</font></strong></span><span> STATUS_OK; </span></span></li> <li class=""> <span></span><span class="func">echo</span><span> STATUS_OK; </span> </li> </ol>
は foo() または ::foo(); を使用して実行できます。
最後に、autoload関数を使用して、指定された名前空間にクラスをロードします。簡単な関数は以下の通りです
<ol class="dp-c"> <li class="alt"><span><span class="keyword"><strong><font color="#006699">function</font></strong></span><span> foo() { </span></span></li> <li class=""><span>... </span></li> <li class="alt"><span>} </span></li> </ol>
このように、例えば
<ol class="dp-c"> <li class="alt"><span><span class="keyword"><strong><font color="#006699">function</font></strong></span><span> __autoload( </span><span class="vars"><font color="#dd0000">$classname</font></span><span> ) { </span></span></li> <li class=""> <span></span><span class="vars"><font color="#dd0000">$classname</font></span><span> = </span><span class="func">strtolower</span><span>( </span><span class="vars"><font color="#dd0000">$classname</font></span><span> ); </span> </li> <li class="alt"> <span></span><span class="vars"><font color="#dd0000">$classname</font></span><span> = </span><span class="func">str_replace</span><span>( </span><span class="string"><font color="#0000ff">'::'</font></span><span>, DIRECTORY_SEPARATOR, </span><span class="vars"><font color="#dd0000">$classname</font></span><span> ); </span> </li> <li class=""> <span></span><span class="keyword"><strong><font color="#006699">require_once</font></strong></span><span>( dirname( </span><span class="keyword"><strong><font color="#006699">__FILE__</font></strong></span><span> ) . </span><span class="string"><font color="#0000ff">'/'</font></span><span> . </span><span class="vars"><font color="#dd0000">$classname</font></span><span> . </span><span class="string"><font color="#0000ff">'.class.php'</font></span><span> ); </span> </li> <li class="alt"><span>} </span></li> </ol>
を呼び出すと自動的にProject_Module_User.class.phpファイルを読み込むことができます(不便そうですが)。
http://www.bkjia.com/PHPjc/446607.html
」