[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: autoload классов из разных папок
Waper
Здраствуйте! Как можно сделать автозагрузку классов находящихся в разных папках одной функцией __autoload? Как показать функции, что нужно искать классы например в папках modules, classes, system?



Спустя 6 минут, 55 секунд (6.07.2010 - 14:14) Lenarfate написал(а):
прописываешь несколько путей и инклюдишь. попробуй

Спустя 30 минут, 36 секунд (6.07.2010 - 14:44) linker написал(а):
ini_set('include_path', 'списко папок с инклудами');

Спустя 34 минуты, 15 секунд (6.07.2010 - 15:18) Waper написал(а):
linker, спасибо, это надо до функции __autoload прописать и все?

Спустя 4 часа, 33 минуты, 4 секунды (6.07.2010 - 19:51) linker написал(а):
Waper, само собой, а лучше ручками в php.ini

Спустя 15 дней, 14 часов, 51 минута, 59 секунд (22.07.2010 - 10:43) igor717 написал(а):
Доброе утро, как раз искал ответ на этот вопрос, но не совсем понял...

linker, т.е. в ini файле мы указываем пути к папкам, где у нас находятся контроллеры, модели и тд. Затем считываем его достаем оттуда нужный массив с настройками и распаковываем его уже здесь:
ini_set('include_path', 'списко папок с инклудами');

А __autoload, тогда как выглядить будет?

Вообще я почитал, оказывается стандартную функцию __autoload, можно заменить на свою собственную. Кто-нибудь пробовал? Лучше это или нет?

Спустя 5 месяцев, 7 дней, 11 часов, 19 минут, 33 секунды (29.12.2010 - 23:03) jumper_dev написал(а):
linker
А если дело касается Хостинга там то вы врятли сможете добраться до php.ini

Спустя 10 дней, 18 часов, 54 минуты, 30 секунд (10.01.2011 - 17:57) moskitos80 написал(а):
Держи брат, я это использую в своих ооп - проектах:

<?php

define('ROOT',$_SERVER['DOCUMENT_ROOT'].'/');

// Файл класса "Автозагрузчик".
// Класс "Автозагрузчик" - преобразует поступившие имена классов, вида: core_classes_dbconnect
// в путь и имя файла core/classes/dbconnect.php
// и автоматич. подключает файл с определением класса, для возможности создания его
// экземпляра


class Autoload
{
static private function load(/*string*/$class_name)
{
$class_name = strtolower($class_name);
$path = str_replace('_',DS,$class_name);

if(file_exists(ROOT.$path.'.php'))
{
include_once(ROOT.$path.'.php');
}
else throw new Exception('Файл '.ROOT.$path.'.php, класса '.$class_name.' - не найден!');
}

static public function register()
{
spl_autoload_register(array(__CLASS__, 'load'));
}
}


//Сразу запускаем механизм авто подгрузки:
Autoload::register();
?>

Надеюсь идея понятна? Ты по сути в имени класса указываешь путь. Автолоадер лишь заменяет "_" на "/" ;)

Спустя 1 год, 5 месяцев, 25 дней, 5 часов, 48 минут, 2 секунды (5.07.2012 - 22:46) nike90 написал(а):
Вот решение :
Но при этом Имя класса должно совпадать с именем подкл. файла, имена на Windows регистро-Не-зависимые, а на виртуальных серверах регистрозависимые, так ка они используют nix-системы, поэтому нужно либо использовать strtolower () или же следить за именами ..

function __autoload ($class) {
/** AutoLoad Config */
if(file_exists("Config/".$class.".php")){
require_once "Config/".$class.".php";
/** AutoLoad Libs */
} elseif(file_exists("Libs/".$class.".php")){
require_once "Libs/".$class.".php";
/** AutoLoad Controllers */
} elseif(file_exists("Controllers/".$class.".php")) {
require_once "Controllers/".$class.".php";
/** AutoLoad Models */
} elseif(file_exists("Models/".$class.".php")) {
require_once "Models/".$class.".php";
/** При ошибке */
} else {
exit("Имя файла не соответствует названии Класса");
}
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.