Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.95/20: Рейтинг темы: голосов - 20, средняя оценка - 4.95
 Аватар для stupidstudent
18 / 15 / 0
Регистрация: 25.10.2011
Сообщений: 241

Какой сделать главный класс и/или какая правильная структура?

11.08.2012, 18:31. Показов 4341. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написал авторизацию и регистрацию без классов. Все работает как положено.
Переделываю через классы:

Какой сделать главный класс и/или какая правильная структура?
Например, я создам класс fns(методы проверки почты, создания хэша, определения ip и подключение к базе данных), а потом создам унаследованные дочерние подклассы - auth и reg.

Туда будут передаваться соответствующие аргументы получаемые из форм авторизации или регистрации.

Такой подход верен? Или предложите свой, пожалуйста.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.08.2012, 18:31
Ответы с готовыми решениями:

Какая структура правильная?
Здравтсвуйте, допустим есть таблица "игры" id name 1 Diablo 2 Starcraft 3 WoW и т.д и каждая игра может относиться к нескольким...

Правильная структура сайта. Как сделать?
Есть 3х страничный сайт. Страницы: Главная, Инфо, Контакты. код файла index.php: <?php get_header(); get_content(); ...

Класс или структура
Задача такая: Есть переменная которая хранит текст. Из этой переменной закинул в коллекцию arrayList только слова. Далее нужно...

34
 Аватар для Василий Макогон
270 / 226 / 11
Регистрация: 20.04.2012
Сообщений: 817
11.08.2012, 22:49
Нет, не верен. Каждый класс должен делать что-то ОДНО. А не
методы проверки почты, создания хэша, определения ip и подключение к базе данных
унаследованные дочерние подклассы - auth и reg
не должны они быть унаследованы. эти классы делают разные вещи.

Читай http://market.yandex.ru/model.... 3447109363

и http://yandex.ru/yandsearch?te... 999&lr=213
1
 Аватар для stupidstudent
18 / 15 / 0
Регистрация: 25.10.2011
Сообщений: 241
11.08.2012, 23:39  [ТС]
Василий Макогон,

у меня есть функция хэширования которая используется и в auth и reg, мне что ее прописывать как метод в обеих классах?
т.е. будут 2 абсолютно одинаковых метода в разных классах.
0
 Аватар для Василий Макогон
270 / 226 / 11
Регистрация: 20.04.2012
Сообщений: 817
12.08.2012, 01:59
тогда ВОЗМОЖНО базовый, да. но он не должен давать других полномочий, кроме работы с auth и reg
1
web dev
 Аватар для TBIKC
107 / 93 / 9
Регистрация: 23.09.2010
Сообщений: 737
12.08.2012, 10:09
Цитата Сообщение от stupidstudent Посмотреть сообщение
у меня есть функция хэширования которая используется и в auth и reg, мне что ее прописывать как метод в обеих классах?
т.е. будут 2 абсолютно одинаковых метода в разных классах.
Что мешает создать новый класс, новую абстракцию ?
1
28 / 50 / 2
Регистрация: 10.01.2012
Сообщений: 347
12.08.2012, 10:35
а auth - это авторизация или аутентификация? )
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
12.08.2012, 11:45
Цитата Сообщение от stupidstudent Посмотреть сообщение
у меня есть функция хэширования которая используется и в auth и reg
напишите абстрактный класс с этим методом и наследуйте его. вынесите в него необходимые для вас методы (объявите) - а то потом запутаетесь и что то забудете по любому. они для этого и существуют
1
 Аватар для c4boomb
198 / 166 / 23
Регистрация: 20.04.2011
Сообщений: 750
Записей в блоге: 1
12.08.2012, 12:11
Кто сказал, что класс должен делать что-то одно....
Целью класса фактически есть создание и использование обьекта.
Приведём аналогию....
Обьект машина(в реальной жизни) - перевоз пасажиров, заправка, починка, апгрейд деталей и т.п.(возможно не очень удачный пример)

При работе с юзером я чаще создаю класс User - родитель . Который наследую другими классами(в зависимостио т типа пользователя)
например: AdminUser, ModeratorUser и т.д.
Что очень удобно.

Добавлено через 54 секунды
и в этот класс Юсер можно записать все функции - логин, регистрация, хеши и т.д и т.п.
1
web dev
 Аватар для TBIKC
107 / 93 / 9
Регистрация: 23.09.2010
Сообщений: 737
12.08.2012, 12:39
Цитата Сообщение от c4boomb Посмотреть сообщение
Кто сказал, что класс должен делать что-то одно....
Целью класса фактически есть создание и использование обьекта.
Да действительно что то одно - описывать одну абстракцию
0
 Аватар для Василий Макогон
270 / 226 / 11
Регистрация: 20.04.2012
Сообщений: 817
12.08.2012, 13:13
Цитата Сообщение от c4boomb Посмотреть сообщение
Кто сказал, что класс должен делать что-то одно....
Целью класса фактически есть создание и использование обьекта.
Это сказали апологеты ООП и практика.

Приведём аналогию....
Обьект машина(в реальной жизни) - перевоз пасажиров, заправка, починка, апгрейд деталей и т.п.(возможно не очень удачный пример)
Обьект машина состоит из тысячи отдельных объектов и все функции "перевоз пасажиров, заправка, починка, апгрейд деталей и т.п." относятся не напрямую к машине, а к её составляющим.

При работе с юзером я чаще создаю класс User - родитель . Который наследую другими классами(в зависимостио т типа пользователя)
например: AdminUser, ModeratorUser и т.д.
Что очень удобно.
с этим никто не спорит.
просто у ТС есть ДВА разных по своему функционалу класса. и тут нужно либо наследование, либо делегирование класса, который бы имел функционал хэширования и проверки этого хэша.

я за делегирование.
1
26 / 26 / 1
Регистрация: 30.09.2011
Сообщений: 196
12.08.2012, 15:44
просто у ТС есть ДВА разных по своему функционалу класса. и тут нужно либо наследование, либо делегирование класса, который бы имел функционал хэширования и проверки этого хэша.
Нечего этой функции там вообще делать. Такие функции любо пишутся отдельно либо собираются как статические методы в какой нибудь класс Utilites. Или юзаются treats которые в версии 5.4 появились.

И зачем самопальная функция хеширования если есть встроеная.
1
 Аватар для stupidstudent
18 / 15 / 0
Регистрация: 25.10.2011
Сообщений: 241
12.08.2012, 17:00  [ТС]
Честно говоря, Вы все меня запутали, т.к. у каждого свое мнение...

Цитата Сообщение от caballero Посмотреть сообщение
И зачем самопальная функция хеширования если есть встроеная.
Потому что, md5 и sha1 недостаточно.

Добавлено через 32 секунды
d1gi, авторизация

Добавлено через 59 минут
Не понятно, что общего между авторизацией и регистрацией, чтобы сделать класс с общими данными, а потом уже наследовать.
Раз у них ничего нет общего, кроме одного метода хэширования, то о5 же мал смысл выделять под 1 метод класс.
Верно?
0
28 / 50 / 2
Регистрация: 10.01.2012
Сообщений: 347
12.08.2012, 17:42
С терминологией надо аккуратно, дело в том, что авторизация - это процесс наделения правами какого-то пользователя, с целью, чтобы потом можно было принять решение какое действие ему можно сделать, а какое нет, а вот чтобы выяснить что за юзер наделяется правами его надо сначала распознать - вот этот процесс и называется аутентификация, к сожалению оба этих слова можно сократить до auth, что может очень сильно дезориентировать...

Вообще процессы аутентицикации, авторизации и регистрации это достаточно разные вещи и можно смело юзать разные классы.
1
 Аватар для stupidstudent
18 / 15 / 0
Регистрация: 25.10.2011
Сообщений: 241
12.08.2012, 18:04  [ТС]
Цитата Сообщение от d1gi Посмотреть сообщение
Вообще процессы аутентицикации, авторизации и регистрации это достаточно разные вещи и можно смело юзать разные классы.
Окей.
Жаль только это считается ошибкой проектирования(2 одинаковых метода) .
Всем спасибо!
0
28 / 50 / 2
Регистрация: 10.01.2012
Сообщений: 347
12.08.2012, 18:05
какие одинаковые методы?
0
 Аватар для stupidstudent
18 / 15 / 0
Регистрация: 25.10.2011
Сообщений: 241
12.08.2012, 18:40  [ТС]
d1gi, метод хэширования один и тотже, что в авторизации, что в регистрации.
0
28 / 50 / 2
Регистрация: 10.01.2012
Сообщений: 347
12.08.2012, 18:52
при наделении прав нужно знать только ИД распознанного юзера, другими словами перед авторизацией надо аутентифицироваться, а в некоторых случаях авторизация вообще ненужна например если в проекте достаточно проверить админа, например user_id = 1 и всё, а остальные юзеры считаются просто юзерами.

для регистрации и аутентификации лучше юзать некий класс, например UserProvider, в нём будет реализован API по созданию, залогиниванию и т.д. таким образом можно в любой момент подменить поставщика юзеров, например если вы решите хранить юзеров не в БД а в плоских файлах.
1
 Аватар для Василий Макогон
270 / 226 / 11
Регистрация: 20.04.2012
Сообщений: 817
12.08.2012, 20:39
Или юзаются treats которые в версии 5.4 появились.
делегирование надо использовать. если до 5.4
1
26 / 26 / 1
Регистрация: 30.09.2011
Сообщений: 196
12.08.2012, 22:14
Потому что, md5 и sha1 недостаточно.
недостаточно для чего?
Не можешь в двух простых классах разобратся а претендуешь на имплементацию хеширования лучшего чем писаные спецами до которых ты вряд ли дорастешь.

делегирование надо использовать. если до 5.4
Делегирование используется когда речь идет о методах объектов. Здесь самодостаточная функция. Максимум что тут имеет смысл сделать ее статическим методом какого нибудь класса чисто для юзания автолоадера.
0
web dev
 Аватар для TBIKC
107 / 93 / 9
Регистрация: 23.09.2010
Сообщений: 737
12.08.2012, 22:27
Цитата Сообщение от stupidstudent Посмотреть сообщение
то о5 же мал смысл выделять под 1 метод класс.
Почему? если есть чёткая абстракция - её надо выделить

Цитата Сообщение от stupidstudent Посмотреть сообщение
Жаль только это считается ошибкой проектирования(2 одинаковых метода) .
Не используйте, раз является ошибкой

Вот класс на закуску:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Hash
{
    /**
     * @static
     * @param string $algo The algorithm(md5,sha1, etc)
     * @param string $data The data to encode
     * @param string $salt The salt
     * @return string  The hashed/salted data
     */
    public static function create($algo, $data, $salt)
    {
        $context = hash_init($algo, HASH_HMAC, $salt);
        hash_update($context, $data);
 
        return hash_final($context);
    }
 
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.08.2012, 22:27
Помогаю со студенческими работами здесь

Структура или класс ?
Всем привет. Объясните, что и в какой ситуации лучше использовать - структуру или класс ? Можете привести практические примеры (без...

Структура или класс
Подскажите, пожалуйста, своими словами, что такое структура и что такое класс. В чем отличие и как их использовать? У меня есть...

Отдельно класс данных, класс формул и главный класс
Здравствуйте! У меня есть три вопроса. Первый вопрос. Скажите пожалуйста! Правильный ли это подход к созданию приложений :...

Класс или структура или кортеж?
В программе определен класс, в котором нет функций, а только 3 поля: string, int, decimal (возможно, появится 4-е decimal). Программа...

Кортеж, структура или класс?
Доброго времени, господа, Подскажите примеры, кейсы когда лучше воспользоваться упаковкой данных в кортеж, а когда лучше представить в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru