2011-01-26 34 views
7

我有几个关于PHP包含路径的问题,包括文件和/或类。为什么在PHP中使用set_include_path()以及如何自动加载来自不同文件夹的类?

下面是我们设置多个包含路径的简单代码片段。我在另一个项目中看到了这个,但我不知道为什么?

在过去的5年中,我从未在我的任何项目中使用过set_include_path()

Q1)
那么设置包含路径的目的究竟是什么?我一直只在include()调用中包含路径。

Q2)
在下面的例子中,它设置了多于一个路径。这是如何工作的在多个位置包含文件,我很困惑的目的或它做了什么?

<?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)
这是稍有不同的问题,但仍涉及包括。下面是一个简单的类自动加载函数。我曾经有一个类文件夹和自动加载所有我的课堂文件。在我目前的项目中,我有一个类库可以像下面那样自动加载,但我也有另一个部分,我可能需要从模块目录中自动加载类文件。

所以我需要自动加载我库类位于某处这样....

根/包括/库/班/ library_class_files.php

+++加+++

位于某处的不同模块(帐户,消息,朋友,照片,博客,论坛等)的加载类别....

根/模块/论坛/ modules_class_files.php

我可能不会需要从两个不同的地方加载类文件,但如果我这样做,我怎么会去这样做呢?

<?php 
//auto include class files that we need on a per page basis 
function __autoload($class_name){ 
    include('library/classes/' .$class_name . '.class.php'); 
} 
?> 

回答

相关问题