php - 为什么在 PHP 中使用 set_include_path() 以及如何从不同的文件夹自动加载类?

标签 php include set-include-path

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

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

root/includes/library/classes/library_class_files.php

+++++++

为位于某处的不同模块(帐户、消息、 friend 、照片、博客、论坛等)加载类....

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');
}
?>

最佳答案

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

问题 2:如手册中所述,PHP 遍历每个路径并尝试找到您的文件。

Q3:使用更现代的SPL Autoloader functionality您可以根据需要定义任意数量的自动加载器。

关于php - 为什么在 PHP 中使用 set_include_path() 以及如何从不同的文件夹自动加载类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4811289/

相关文章:

php - mysqli 子查询,准备好的语句返回 bool 值

c++ - #include 语句应该放在哪里?

php - CLI 包括通过 cron 运行 zend 框架的路径

php - PHP 中的命名空间和 set_include_path() 有问题

php - 拉维尔 5 : Controller Inter-Communication and Instantiation

php - 尝试从 mysql 表中的时间戳获取月份和年份

javascript - 如何在magento的成功页面中动态集成JS代码

c - C 和 H 文件中的 Typedef 和 Struct

html - Laravel Blade @include .html文件