10

関数 set_include_path() を知りました。この間ずっと、config.php ファイルで定数を定義しました。

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 のアプローチ、およびその逆に利点はありますか? 一定のアプローチは時代遅れですか?

4

2 に答える 2

6

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', ...) を使用します。

于 2009-11-24T04:46:47.037 に答える
5

マイケルの説明は非常に明確だと思います。

すべての PHP ファイルをフォルダーに格納する場合は、"set_include_path" を使用することをお勧めします。たとえば、"libs/" (簡単です)。ファイル パスを明示的に指定しているため、define() メソッドを使用する方が高速です。

本当に必要でない限り、絶対パスの使用は常に避けてください。このようにパスを指定すると非常に便利であることがわかりました:

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

これにより、コードを移動するたびにパスを更新する必要がなくなります。

于 2009-11-24T09:06:15.747 に答える