我有几个关于PHP中包含路径的问题,包括文件和/或类。
下面是一个简单的代码片段,我们在其中设置多个包含路径。我在另一个项目中看到了这个,但我不确定为什么?
在过去5年左右的时间里,我从来没有在任何项目中使用 set_include_path()。
Q1)
那么设置包含路径的目的到底是什么?我总是在include()调用中包含路径。
Q2)
在下面的示例中,它设置了多于1个路径。如何将文件包含在多个位置,我对目的或准确的做法感到困惑?
<?php
// Define App path
define('APPLICATION_PATH', realpath('../'));
// Build array of 3 different paths
$paths = array(
APPLICATION_PATH,
APPLICATION_PATH . '\com',
get_include_path()
);
/*
Result of array above...
Array
(
[0] => E:\Web Server\xampp\htdocs\test
[1] => E:\Web Server\xampp\htdocs\test\com
[2] => .;C:\php5\pear
)
*/
// Set include path from array above
// http://us3.php.net/manual/en/function.set-include-path.php
set_include_path(implode(PATH_SEPARATOR, $paths));
?>
Q3)
这是一个略有不同的问题,但仍然涉及到包括。下面是一个简单的类自动加载功能。我曾经有一个类文件夹和自动加载所有我的类文件。在我当前的项目中,我有一个类自动加载的类库,如下所示,但我还有另一个部分,我可能需要从modules目录自动加载类文件。
所以我需要在这样的地方自动加载我的库类 ....
root / includes / library / classes / library_class_files.php
+++ plus +++
加载位于此处某处的不同模块(帐户,消息,朋友,照片,博客,论坛等)的类....
root / modules / forums / modules_class_files.php
我可能不需要从2个不同的位置加载类文件,但如果我这样做,我将如何去做呢?
<?php
//auto include class files that we need on a per page basis
function __autoload($class_name){
include('library/classes/' .$class_name . '.class.php');
}
?>
答案 0 :(得分:5)
Q1:http://php.net/manual/en/ini.core.php#ini.include-path
Q2:如手册中所述,PHP遍历每个路径并尝试查找您的文件。
问题3:使用更现代的SPL Autoloader functionality,您可以根据需要定义任意数量的自动加载器。