定义我自己的BASE_PATH与set_include_path?

Joh*_*ohn 8 php set-include-path

我了解了函数set_include_path().这一次,我在config.php文件中定义了一个常量

define('BASE_PATH', '/var/www/mywebsite/public_html/');
Run Code Online (Sandbox Code Playgroud)

在所有后续的php文件中,我都会这样包含

include(BASE_PATH.'header.php');
include(BASE_PATH.'class/cls.data_access_object.php');
Run Code Online (Sandbox Code Playgroud)

使用常量方法与set_include_path方法有什么优势,反之亦然?常量方法是否过时了?

Mic*_*ael 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',...).


lep*_*epe 5

我认为 Micahel 的解释非常清楚。

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

除非真的有必要,否则总是尽量避免使用绝对路径。我发现以这种方式指定路径非常有用:

define("BASE_PATH", dirname(__FILE__));
Run Code Online (Sandbox Code Playgroud)

这样您就可以避免每次移动代码时都必须更新路径。