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

У меня есть пара вопросов о пути включения в 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

+++ plus +++

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

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');
}
?>
7 голосов | спросил JasonDavis 27 Jam1000000amThu, 27 Jan 2011 02:21:41 +030011 2011, 02:21:41

1 ответ


0

Q1: http://php.net/manual/en/ini.core .php # ini.include-путь

Q2: как уже упоминалось в руководстве, PHP перебирает каждый путь и пытается найти ваш файл.

В3. Используя более современные функциональные возможности автозагрузчика SPL , вы можете определить любое количество автозагрузчиков.

ответил KingCrunch 27 Jam1000000amThu, 27 Jan 2011 02:27:06 +030011 2011, 02:27:06

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132