7

我对 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)
这是一个略有不同的问题,但仍然与包含有关。下面是一个简单的类自动加载功能。我曾经有一个类文件夹并自动加载我所有的类文件。在我当前的项目中,我有一个类库来自动加载,如下所示,但我还有另一个部分,我可能需要从模块目录自动加载类文件。

所以我需要自动加载我的库类位于这样的地方......

根/includes/library/classes/library_class_files.php

+++加+++

为类似这样的某个地方的不同模块(帐户、消息、朋友、照片、博客、论坛等)加载类......

根/模块/论坛/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');
}
?>
4

1 回答 1

5

Q1: http: //php.net/manual/en/ini.core.php#ini.include-path

Q2:如手册中所述,PHP 会遍历每个路径并尝试查找您的文件。

Q3:使用更现代的SPL 自动加载器功能,您可以定义任意数量的自动加载器。

于 2011-01-26T23:27:06.280 回答