2009-09-03 6 views
2

簡単な質問。ファイル内で使用するクラスをインクルードするのになぜrequire_onceを使用するのですか?私はZend_Db_Table_Abstractを拡張するクラスを作成した場合、私は本当には、クラス宣言ファイルでこれを持っているを必要としない:Zend Frameworkベースのライブラリでクラスを要求する

require_once "Zend/Db/Table/Select.php"; 

彼らはとにかくオートローダで含まれています。明示的に「輸入」を宣言するためのパフォーマンスの向上はありますか?ユニットテストですか?

答えて

6

簡易回答:オートローダーを使用していない場合、機能は中断されません。

オートローダーを使用していることが分かっている場合はプロジェクトでこれを行う必要はありませんが、他の開発者が使用するフレームワーク(Zendなど)で作業している場合は、互換性の問題を最小限に抑えて再利用可能にしたいので、明示的な依存関係が必要です。

他のメリットは、クラスが他の多くのクラスに依存するようになったときに役立ちます。これにより、オブジェクトを設計する際にcouplingを最小限に抑えることができます。

/** 
* @see Zend_Db_Select 
*/ 
require_once 'Zend/Db/Select.php'; 


/** 
* @see Zend_Db_Table_Abstract 
*/ 
require_once 'Zend/Db/Table/Abstract.php'; 
+0

おっと、そうです、それはタイプミスでした。それは理にかなっています。たとえば、Zend_Amf実装のための別個のブートストラップを書いていたのですが...もしそれがオートローダーを使用していなければ、事態が壊れるかもしれません。素晴らしい答え。 – typeoneerror

+0

カップリングについての注釈は非常に良いものです。私は戻って、遡っていくつかの授業のために必要なものが出てきました。私はまた、Zend Framework自体の多くに明示的な要求がないことに気付きました。 – typeoneerror

+0

ZFのベースコードに欠けていると思われるRequiresのJIRAにいくつかのレポートを入れる価値があります。既に良いプロジェクトに貢献する – gnarf

0

Zend/Db/Table/Select.phpからあなただけのクラスのロードに使用されなければならない「// require_onceを」のrequire_onceと「のrequire_once」を置き換えることによって、あなたのIDEでこれらの呼び出しを取り除くことができます。例えば、$file = include "test.php";のようなファイルから配列を挿入するなど、それを使用しないでください(または使用する必要はありません)。

関連する問題