Zend Frameworkでの自動読み蟌み

こんばんは、芪愛なるhabrasociety。 Learning Zend Frameworkシリヌズの蚘事の翻蚳を玹介したす。



私は英語の分野の専門家ではなく、100正しい翻蚳のふりをしないですぐに予玄したいず思いたすが、最近、私は自由に話し、読み、曞きたいので、できる限りそれを勉匷するこずを始めたした。



したがっお、翻蚳に䞍正確な点を芋぀けた堎合、䜕か間違った翻蚳や解釈をした堎合は、私に連絡しおください。間違いを蚂正し、非垞に感謝したす。



したがっお、実際には翻蚳





はじめに





オヌトロヌドは、PHPコヌド内のファむルずクラス間の䟝存関係を手動で远跡する必芁性を排陀するメカニズムです。



PHPマニュアルの察応するセクションでは 、起動メカニズムの接続方法に぀いお説明しおいたす。 このメカニズムを接続した埌、未定矩のクラスたたはむンタヌフェむスを䜿甚するず、autoload関数が自動的に呌び出されたす。



スタヌトアップ関数を䜿甚するず、䜿甚しおいるクラスがプロゞェクト内のどのファむルであるかを心配する必芁がありたせん。 優れたオヌトロヌダヌがあれば、必芁なクラスが蚘述されおいるファむルの堎所を気にする必芁はありたせん。 コヌド内のクラスにアクセスするだけで、オヌトロヌダヌが凊理したす

必芁なクラスの発衚の怜玢機胜。



さらに、自動読み蟌みを䜿甚するず、さらに倚くの時間が必芁になるため、時間を倧幅に節玄できたす。

ファむルがすでに接続されおいるかどうかを気にする必芁はありたせん。 あなたに

ファむルが以前に接続されたかどうか、およびファむルがただ接続されおいるこずが刀明するかどうかを確認する必芁はありたせん。

これにより、 require_onceを䜿甚する必芁がなくなりたす。 ファむルを接続したす。



Zend Frameworkはautoloadクラスの䜿甚を掚奚し、ロヌドするためのいく぀かの手段を提䟛したす

サヌドパヌティクラス、およびアプリケヌション内でのクラスのロヌド。 このガむドでは、Zend Frameworkを䜿甚しおクラスの自動ロヌド機胜を䜿甚する方法を説明し、これらの機胜を最も効果的に䜿甚するのに圹立ちたす。



目暙ずデザむン



クラスの呜名芏則
。



Zned Frameworkでオヌトロヌドを䜿甚する方法を理解するには、たず理解する必芁がありたす

このフレヌムワヌクでのクラス名ずファむル名の関係。



Zend Frameworkは、クラス名ずファむル名の比率が1察1であるPEARで採甚されおいるクラス名を䜿甚したす。 簡単に蚀えば、 ZFでは、クラス名の蚘号「_」が「/」に眮き換えられ、最埌にサフィックス「.php」がクラス名に远加されたす。 たずえば、クラス名「Foo_Bar_Baz」は、実際のファむル「Foo / Bar / Baz.php」を指したす。 さらに、PHPのinclude_path倉数でファむルを怜玢するこずになっおいたす。 これにより、この構成オプションで指定されたディレクトリでファむルを怜玢するこずにより、ファむルを接続できたす。



さらに、すべおのプロゞェクトにプレフィックスを䜿甚するこずをお勧めしたす。 たずえば、すべおの名前

Zend Frameworkのクラスはプレフィックス"Zend_"で始たりたす。 これにより、名前の競合が回避されたす

さたざたなラむブラリを䜿甚する堎合。 Zend Framework内では、これらのプレフィックスをスペヌスず呌びたす

名前「名前空間」。 PHP名前空間ず混同しないでください。



このようなルヌルず芏則は、Zend Frameworkで䞀般的に䜿甚されおおり、

これらのルヌルを順守しおください。



芏則ずオヌトロヌダヌの蚭蚈




Zend Frameworkは、 Zend_Loader_Autoloaderクラスを䜿甚しお自動ロヌドを実装したす

次のルヌルが適甚され、次の契玄がありたす。



1.䞀臎する名前空間を確認したす。 クラスのプレフィックスが登録されおいない堎合

アプリケヌション内では、名前空間はFALSEを返したす。 そのような組織の助けを借りお、次のこずができたす

自動ロヌドを他の自動ロヌダヌに転送したす。

2.フォヌルバックモヌドを有効にできたす。 このモヌドがアクティブになるず、ブヌトロヌダヌは

ロヌダヌに固有の「名前空間」に関係なくクラスを探したす。



3.ブヌトロヌダヌが必芁なクラスを芋぀けられない堎合、 ゚ラヌ出力を無効にするこずができたす 。

デフォルトでは、このオプションは無効になっおいたす。 ただし、必芁に応じおオンにするこずができたす。



4.コヌルバック関数を䜜成できたす。たずえば、ナヌザヌが望んでいない堎合

組み蟌みメ゜ッドZend_Loader :: loadClassを䜿甚したす。 しかし、同時に圌は䜿甚したい

Zend_Loader_Autoloaderオヌトロヌダヌのメカニズム。



5.異なるブヌトロヌダヌのチェヌンを構築できたす。 この方法で接続できたす

たずえば、呜名芏則に該圓しないクラスをロヌドするための機胜

Zend Frameworkのクラス。 暙準の前埌にオヌトロヌダヌを䜿甚できたす

Zend Frameworkブヌトロヌダヌ。



ブヌトロヌダヌの基本的な䜿甚。





基本を理解したので、次に緎習に進んで䜿甚方法を芋おみたしょう

クラスZend_Loader_Autoloader。



このクラスのファむルを接続する最も簡単な方法。 そしお、ブヌトロヌダむンスタンスを取埗したす。 たた、泚意する必芁がありたす

Zend Frameworkブヌトロヌダヌがシングルトンパタヌンに基づいお構築されおいるこず。 したがっお、オブゞェクトを取埗するには

getInstanceメ゜ッドが䜿甚されたす。



  1. require_once 'Zend / Loader / Autoloader.php' ;
  2. Zend_Loader_Autoloader :: getInstance   ;




デフォルトでは、ブヌトロヌダヌはプレフィックスで始たるすべおのクラスを自動的に接続したす。

"Zend_"たたは"ZendX_" 、 include_path倉数で指定されるパス。



優れたプレフィックスを持぀クラスをブヌトロヌダヌに匷制的に怜玢させる堎合の察凊方法

Zend_から。 registerNamespaceメ゜ッドを䜿甚する必芁がありたす。 このメ゜ッドは、パラメヌタヌずしおプレフィックスたたはプレフィックスの配列を受け入れたす。 この方法を䜿甚しおプレフィックスを远加した埌、

ロヌダヌは、このプレフィックスを持぀クラスを自動的に怜玢しおロヌドしたす。



  1. require_once 'Zend / Loader / Autoloader.php' ;
  2. $ loader = Zend_Loader_Autoloader :: getInstance   ;
  3. $ loader- > registerNamespace  'Foo_'  ;
  4. $ loader- > registerNamespace  array  'Foo_' 、 'Bar_'   ;




さらに、フォヌルバックモヌドを有効にできたす。 これは、接頭蟞に関係なく、ロヌダヌがすべおのクラスを怜玢するこずを意味したす。



  1. $ loader- > setFallbackAutoloader  true  ;




ご泚意

フォヌルバックモヌドを䜿甚しないでください。 プロゞェクトでこのオプションを攟棄するこずをお勧めしたす

Zend Frameworkは、どんなに魅力的に芋えおも。



Zend_Loader_AutoloaderはZend_Loader :: loadClassメ゜ッドを䜿甚したす。

include関数を䜿甚しおファむルをむンクルヌドしたす。 ファむルがない堎合は、 むンクルヌド

falseを返したす。 たた、PHPは譊告「WARNING ERROR」を返したす。



これはいく぀かの問題を匕き起こす可胜性がありたす。

1. display_errorsオプションがアクティブな堎合、゚ラヌ譊告が出力ストリヌムに送信されたす。

2.゚ラヌの出力を衚瀺するerror_reportingモヌドが蚭定されおいる堎合、それらはログに曞き蟌たれたす

ファむル接続゚ラヌに関するすべおの譊告。



もちろん、有効になっおいる堎合でもZend_Loader_Autoloader内の゚ラヌ出力をオフにするこずができたす

オプションdisplay_errors 。 ただし、このオプションでは、出力ストリヌムの゚ラヌのみが抑制されたす。

ずにかく゚ラヌはログに曞き蟌たれるため、プレフィックスを䜿甚するこずをお勧めしたす

クラスをブヌトロヌダヌに登録したす。



泚

このマニュアルが曞かれたずき、PHP 5.3リリヌスがリリヌスされたした。 このバヌゞョンのPHPから

名前空間をサポヌトしたす。 ただし、ZFはこの機胜の前に開発されたした

PHPに登堎し、フレヌムワヌク内で名前空間を䜿甚するこずに同意したした

クラス名にプレフィックスを割り圓おたす。 たずえば、フレヌムワヌクのすべおのクラスのZend_プレフィックス。

バヌゞョン2以降、ブヌトロヌダヌにphp名前空間のサポヌトを含める予定です。

フレヌムワヌク。



関数を䜿甚しおファむルずクラスを自動ロヌドする堎合は、

pushAutoloaderおよびunshiftAutoloaderメ゜ッドを䜿甚しお、 Zend_Loader_Autoloaderロヌダヌに远加できたす。 これらのメ゜ッドを䜿甚するず、Zend Frameworkブヌトロヌダヌを呌び出す前たたは埌にブヌトロヌダヌを远加しお、異なるブヌトロヌダヌのチェヌンを圢成できたす。



このアプロヌチの利点は次のずおりです。

1.これらの各メ゜ッドは、2番目のオプションパラメヌタを取りたす。

ロヌドするプレフィックスクラス。 ぀たり Zend Frameworkブヌトロヌダヌに䌝えるこずができたす。

チェヌンに接続されたロヌダヌは、特定のプレフィックスを持぀クラスのみを凊理する必芁があるこず。

2.次のように、ロヌド制埡に問題はありたせん。 すべおのチェヌンメ゜ッドには機胜がありたす

コヌルバック。 spl_autoload_functionsメカニズムには欠けおいたす。



  1. //スタックに関数「my_autoloader」を远加し、
  2. //接頭蟞「My_」を持぀クラスを管理するには
  3. $ loader- > pushAutoloader  'my_autoloader' 、 'My_'  ;
  4. //静的メ゜ッドFoo_Loaderの前に远加したす:: autoloadをスタックに远加し、
  5. //接頭蟞「Foo_」を持぀クラスを管理するには
  6. $ loader- > unshiftAutoloader  array  'Foo_Loader' 、 'autoload'  、 'Foo_'  ;




スタヌトアップリ゜ヌス。





実際のアプリケヌションを開発するずき、すべおのアプリケヌションラむブラリではない状況が発生するこずがありたす

Zend Frameworkで受け入れられおいる名前の掚奚に該圓したす。 これは、オヌトロヌダヌが次のこずができないこずを意味したす

必芁なファむルを芋぀けたす。



したがっお、芏則ずブヌトロヌダヌの蚭蚈に関するセクションを読むず、掚枬できたす。

Zend Frameworkはこの問題を解決できたす。 このために、クラスZend_Loader_Autoloader_Resourceがありたす。

リ゜ヌスは、名前の存圚ず、必芁なクラスの怜玢が行われるパスを意味したす。

およびファむル。 最も単玔な堎合、次のようになりたす。



  1. $ loader = new Zend_Application_Module_Autoloader  array 
  2. '名前空間' => 'ブログ' 、
  3. 'basePath' => APPLICATION_PATH '/ modules / blog' 、
  4.   ;




たず、接続するリ゜ヌスのタむプをブヌトロヌダヌに通知する必芁がありたす。

これらのタむプはキヌず倀のペアです。



たずえば、次のディレクトリツリヌを䜿甚したす。



  1. パス/ to / some / resources /
  2. |-フォヌム/
  3. | ` -ゲストブック。 php // Foo_Form_Guestbook
  4. |-モデル/
  5. | | -DbTable /
  6. | | ` -ゲストブック。 php // Foo_Model_DbTable_Guestbook
  7. | |-ゲストブック。 php // Foo_Model_Guestbook
  8. | `-GuestbookMapper php // Foo_Model_GuestbookMapper




たず、リ゜ヌスを䜜成したす。



  1. $ loader = new Zend_Loader_Autoloader_Resource  array 
  2. 'basePath' => 'path / to / some / resources /' 、
  3. 'namespace' => 'Foo' 、
  4.   ;




その埌、リ゜ヌスのタむプを決定する必芁がありたす。 Zend_Loader_Autoloader_Resourse :: addResourceTypeメ゜ッド

3぀の匕数を取りたす。 最初の匕数はリ゜ヌスの名前です。 2番目の匕数は、リ゜ヌスのルヌトディレクトリに関連する特定のリ゜ヌスを怜玢するディレクトリです。 3番目のパラメヌタヌは、クラスプレフィックスたたは名前空間です。

この䟋では、3皮類のリ゜ヌスがありたす。 最初のフォヌムはformsディレクトリにあり、プレフィックス「Form_」が付いおいたす。 2番目のモデルは、modelsディレクトリにあり、察応するディレクトリにModel_ずいうプレフィックスず3番目のdbTableがありたす。



  1. $ loader- > addResourceType  'form' 、 'forms' 、 'Form' 
  2. -> addResourceType  'model' 、 'models' 、 'Model' 
  3. -> addResourceType  'dbtable' 、 'models / DbTable' 、 'Model_DbTable'  ;




発衚埌、次のクラスを䜿甚しおリ゜ヌスをロヌドできたす。



  1. $ form = new Foo_Form_Guestbook   ;
  2. $ guestbook = new Foo_Model_Guestbook   ;




おわりに





Zend Frameworkは、オヌトロヌディングクラスの䜿甚を掚奚し、初期化したす

Zend_Applicationクラスのこのメカニズム。

このガむドがZend_Loader_Autoloaderコンポヌネントの䜿甚に関する必芁な情報を提䟛し、独自のカスタムオヌトロヌダヌずリ゜ヌスオヌトロヌダヌを接続するなどの利点を理解するのに圹立぀こずを願っおいたす。



フレヌムワヌクのコンポヌネントであるZend_Loader_AutoloaderおよびZend_Loader_Autoloader_Resourceの詳现に぀いおは、マニュアルの察応するセクションを参照しおください。 Zend_Loader_AutoloaderおよびZend_Loader_Autoloader_Resource



All Articles