2009-11-24 3 views
7

私は関数set_include_path()を知りました。すべてのこの時間は、私はconfig.phpファイル自分のBASE_PATHとset_include_pathを定義しますか?

define('BASE_PATH', '/var/www/mywebsite/public_html/'); 

で定数を定義し、後続のすべてのphpファイルで、私はどんな利点が一定のアプローチ対してありますので、

include(BASE_PATH.'header.php'); 
include(BASE_PATH.'class/cls.data_access_object.php'); 

のように含まれるであろうset_include_pathアプローチとその逆?一定のアプローチは時代遅れですか?

答えて

5

set_include_path()(またはini_set( 'include_path'、...))を使用すると、ライブラリコードを含む複数のフォルダを指定できます。たとえば、アプリケーションがさまざまな異なるフレームワーク/ライブラリに依存している場合などです。 PEARとZend FWの場合、

ini_set( 'include_path'、 '/ usr/local/php/pear:/ usr/local/php/zendfw')のようなものがあります。

このアプローチの欠点は、最初に見つかったファイルを使用することです。複数のインクルードパスに "Mailer.php"というファイルがある場合、最初に見つかったものがインクルードされ、それがあなたの意図でない場合は微妙なバグが発生します。良いコード構成は、通常、その問題を解決します。また、include_pathはrealpathキャッシュ(http://us2.php.net/realpath)を通過しますが、設定に応じてパフォーマンスを向上させるために調整が必要な場合があります。

どちらの方法も問題ありませんが、define()メソッドを使用する方がより明示的です。

FWIWでは、一般的にはini_set( 'include_path'、...)を使用します。

4

ミカエルの説明は非常に明確だと思います。

すべてのPHPファイルをフォルダに保存するときは、 "set_include_path"を使用することをお勧めします。たとえば、 "libs /"(より簡単です)。 ファイルパスを明示的に指定するよりも、define()メソッドを使用するほうが高速になります。

絶対パスが本当に必要でない限り、絶対に使用しないようにしてください。 私はあなたのパスをこのように指定することは非常に有用であることが判明:あなたは、パスにあなたがコードを移動するたびに更新する必要が回避されます

define("BASE_PATH", dirname(__FILE__)); 

この道を。

+0

素晴らしい!私はちょうど数日前にdirname()について聞いた – John

関連する問題