Зачем использовать set_include_path ( ) в PHP и как автоматически загружать классы из разных папок?

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

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

root / includes / library / classes / library_class_files. php

+++ plus +++

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

root / modules / forum / 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');
}
?>
7
задан JasonDavis 26 January 2011 в 23:21
поделиться