定义我自己的BASE_PATH与set_include_path?

时间:2009-11-24 03:50:43

标签: php set-include-path

我了解了函数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方法有什么优势,反之亦然?常数方法是否过时了?

2 个答案:

答案 0 :(得分: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会遍历实际路径缓存(http://us2.php.net/realpath),有时需要根据您的设置调整以获得更好的性能。

两种方式都很好,但是使用define()方法更明确。

FWIW,我通常使用ini_set('include_path',...)。

答案 1 :(得分:4)

我认为Micahel的解释非常明确。

当您将所有PHP文件存储在一个文件夹中时,我建议您使用“set_include_path”,例如:“libs /”(更容易)。 在明确指定文件路径时,使用define()方法应该更快。

除非确实需要,否则始终尽量避免使用绝对路径。 我发现以这种方式指定路径非常有用:

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

这样,每次移动代码时都可以避免更新路径。