[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема с наследованием
alex12060
Приветствую Вас, человек!
В общем, у меня такая проблема сложилась.
У меня есть главный класс (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); или типа того






Спустя 14 минут, 57 секунд (25.09.2011 - 11:30) alex12060 написал(а):
Цитата
у тебя клас - контролер приложения отнаследован от класса БД. Оно конешно удобно но архитектурно - через задницу


Возможно smile.gif

Цитата
либо, самое правильное, синглетон со статическим методом возвращающим екземпляр Mysqli


Были мысли, но тут это не к месту.

Цитата

не очень понятно кто кого как использует
каким образром Auth юзает Main? В коде этого не видно


В том то и дело, что никак, а нужно, чтобы пользовал все то, что пользует Main

Цитата

$obj = new Auth($this); или типа того


Не плохая идея, щас рискнем smile.gif

Спустя 5 минут, 6 секунд (25.09.2011 - 11:35) alex12060 написал(а):
Ога, все щикарно.
Спасибо тебе, caballero

Спустя 1 минута, 34 секунды (25.09.2011 - 11:37) caballero написал(а):
Цитата
Возможно

стопицот что так

Цитата
Были мысли, но тут это не к месту.


Это к месту везде где нормально спроектирована структура. Прискорбно что ТУТ это не так.


Цитата
Не плохая идея, щас рискнем

чисто интересно как ты обращался к Main из Auth не имея на него ссылки и не имея статического фабричного метода или типа того

Спустя 1 минута, 38 секунд (25.09.2011 - 11:38) alex12060 написал(а):
caballero

Архитектура сейчас только разрабатывается, ога. Учту вышесказанные замечания.
Быстрый ответ:

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