В общем, у меня такая проблема сложилась.
У меня есть главный класс (Main) который существует как переключатель, т.е. он является такой обособленной структурой, которая в зависимости от нужды передает работу другому классу, предварительно подключая его и возвращает результат (что-то типа MVC).
У меня класс Main наследует самописную ООП обертку MySQL(i)
Все работает, отлично, но...
Я реализовываю регистрацию\авторизацию подобным образом:
Я завел папку "external", в которой буду хранить подключаемые логические библиотеки для узкого (локализованного) решения задачи. В данный момент, там лежит класс для авторизации.
Функция авторизации работает так:
# class "Main"
public function login($all) {
$obj = new Auth;
if (!empty($all)) {
switch($all['type']) {
case 'proc_login':
$login = isset($all['login']) ? $all['login'] : null;
$passw = isset($all['passw']) ? $all['passw'] : null;
$rem = isset($all['rem']) ? (bool)$all['rem'] : false;
$result = $obj->process_auth($login, $passw, $rem);
if (is_bool($result)) {
echo 'success: Вы успешно вошли на сайт! Спасибо за то, что выбрали нас!';
return;
} else {
echo 'error: '.$result;
return;
}
break;
case 'get_label':
$obj->get_label();
break;
}
} else {
echo 'empty type';
}
return;
}
Она является переключателем, и при авторизации отправляет в функцию process_auth все, что нужно. В общем, строка $obj = new Auth; подключает тот самый external класс Auth.
Реализовал через автолоадер:
function autoload($class) {
$class = mb_strtolower($class);
if (file_exists('external/'.$class.'.class.php'))
include_once('external/'.$class.'.class.php');
else
die('error: Не найден класс '.$class.' для подключения.');
return;
}
spl_autoload_register('autoload');
Подключает, все отлично, но!
Мой external класс должен пользоваться библиотекой MySQL, которую наследует класс Main, но этого не происходит :(
Все время пишет, что не знает о таком..
Если включить в external класс бибилиотеку инклудом и отнаследовать, то происходит 2 вещи:
- Рушится семантика
- Ругается на "перереализацию" класса или функции.
У меня мозг кипит уже, не знаю как правильно спроектировать, помогите, гуру, буду превилико благодарен!
Спустя 1 час, 56 минут, 12 секунд (25.09.2011 - 11:15) caballero написал(а):
Нследование здесь не к месту
у тебя клас - контролер приложения отнаследован от класса БД. Оно конешно удобно но архитектурно - через задницу
либо агрегация либо, самое простое, глобальная переменная с екземпляром класса
либо, самое правильное, синглетон со статическим методом возвращающим екземпляр Mysqli
чтобы не было перереализации исполдьзуй вместо инклуда require_once
Хотя автолоад конечно самое правильное
не очень понятно кто кого как использует
каким образром Auth юзает Main? В коде этого не видно
по идее раз уж такое нагородил ты должен передавать ссылку на екземпляр Main в Auth
$obj = new Auth($this); или типа того
у тебя клас - контролер приложения отнаследован от класса БД. Оно конешно удобно но архитектурно - через задницу
либо агрегация либо, самое простое, глобальная переменная с екземпляром класса
либо, самое правильное, синглетон со статическим методом возвращающим екземпляр Mysqli
чтобы не было перереализации исполдьзуй вместо инклуда require_once
Хотя автолоад конечно самое правильное
не очень понятно кто кого как использует
каким образром Auth юзает Main? В коде этого не видно
по идее раз уж такое нагородил ты должен передавать ссылку на екземпляр Main в Auth
$obj = new Auth($this); или типа того
Спустя 14 минут, 57 секунд (25.09.2011 - 11:30) alex12060 написал(а):
Цитата |
у тебя клас - контролер приложения отнаследован от класса БД. Оно конешно удобно но архитектурно - через задницу |
Возможно

Цитата |
либо, самое правильное, синглетон со статическим методом возвращающим екземпляр Mysqli |
Были мысли, но тут это не к месту.
Цитата |
не очень понятно кто кого как использует каким образром Auth юзает Main? В коде этого не видно |
В том то и дело, что никак, а нужно, чтобы пользовал все то, что пользует Main
Цитата |
$obj = new Auth($this); или типа того |
Не плохая идея, щас рискнем

Спустя 5 минут, 6 секунд (25.09.2011 - 11:35) alex12060 написал(а):
Ога, все щикарно.
Спасибо тебе, caballero
Спасибо тебе, caballero
Спустя 1 минута, 34 секунды (25.09.2011 - 11:37) caballero написал(а):
Цитата |
Возможно |
стопицот что так
Цитата |
Были мысли, но тут это не к месту. |
Это к месту везде где нормально спроектирована структура. Прискорбно что ТУТ это не так.
Цитата |
Не плохая идея, щас рискнем |
чисто интересно как ты обращался к Main из Auth не имея на него ссылки и не имея статического фабричного метода или типа того
Спустя 1 минута, 38 секунд (25.09.2011 - 11:38) alex12060 написал(а):
caballero
Архитектура сейчас только разрабатывается, ога. Учту вышесказанные замечания.
Архитектура сейчас только разрабатывается, ога. Учту вышесказанные замечания.