2011-01-26 1 views
7

У меня есть пара вопросов о пути include в PHP и включая файлы и/или классы.Зачем использовать set_include_path() в PHP и как автоматически загружать классы из разных папок?

Ниже приведен простой фрагмент кода, в котором мы устанавливаем несколько включенных путей. Я видел это в другом проекте, но я не уверен, почему?

Мне никогда не приходилось использовать set_include_path() в любом из моих проектов за последние 5 лет или около того.

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)
Это немного другой вопрос, но все же относится к включает в себя. Ниже приведена простая функция автозагрузки для классов. Раньше у меня была папка классов и автозагрузка всех моих файлов классов. В моем текущем проекте у меня есть библиотека классов для автозагрузки, как показано ниже, но у меня также есть другой раздел, где мне может потребоваться автозагрузка файлов классов из каталога модулей.

Так мне нужно будет автозагрузку мои библиотеки классов, расположенный где-то вроде этого ....

корень/включает/библиотека/классы/library_class_files.php

+++ плюс +++

классы загрузки для различных модулей (учетная запись, сообщения, друзья, фотографии, блоги, форумы и т. Д.), Расположенные где-то подобным образом.

root/modules/forums/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'); 
} 
?> 

ответ

Смежные вопросы