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 回答