Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
9 / 9 / 7
Регистрация: 25.01.2016
Сообщений: 39

Качество класса users

21.01.2017, 13:14. Показов 1720. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, интересно узнать чье то мнение кроме своего об этом классе, адекватен ли он и его стоит разбить на несколько или развивать функционал, в нем в будущем должно быть Удаление , смена пароля, работа с анкетой пользователя, и некоторые другие фишки, во многих местах пишут что классы не должны быть громоздкими, содержать минимум функций, чтобы было все понятно, а функции хоть немного не поддающиеся общей тематики класса сразу выносить в другой файл,а тут как раз такая ситуаций, регистрация авторизация, плюс планируется работа с анкетой и тд.
В исходниках других проектов постоянно нахожу какие то странные части которые кажутся несуразными, в итоге из-за этого теряюсь, не знаю как правильнее.
И еще вопрос, пишу чат, по типу blab чата, ооп mvc , для портфолио. Когда будет бета версия как и где мне ее осветить? чтобы узнать мнение более знающих людей о нем, плюс хочется попробовать испытать в полевых условиях, например предложить какому нибудь вебмастеру использовать мой чат бесплатно и с моей поддержкой, (могу настроить lamp и другие мелочи). Как мне найти такого вебмастера , может кто-то сталкивался с таким уже?
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<?php
 
    defined('CHAT') or die('access denied');
    //require_once'config.php';
    class user{
        private $mysqli;
        function __construct(){
            global $_curldb,$_cnamedb,$_cpassdb,$_clogindb;
            
            $this->mysqli=new mysqli($_curldb,$_clogindb,$_cpassdb,$_cnamedb);
            if($this->mysqli->connect_errno)die('error db connect');
            
        }
        function auth($login,$pass){
            $login=trim($this->mysqli->real_escape_string($login));
            $pass=trim($this->mysqli->real_escape_string($pass));
            if(!(strlen($login)>=4 and strlen($login)<20 and strlen($pass)>=4 and strlen($pass)<12))
                return -1;
            $res=$this->mysqli->query('SELECT id,priv from users where login="'.$login.'" and pass="'.$pass.'"');
            if($res->num_rows==1){
                $priv=$res->fetch_assoc;
                session_start();
                $_SESSION['login']=$login;
                $_SESSION['priv']=$priv['priv'];
                return 1;
            }
            return -1;
        }
        function reg($login,$pass,$repass){
            $login=trim($this->mysqli->real_escape_string($login));
            $pass=trim($this->mysqli->real_escape_string($pass));
            if(!(strlen($login)>=4 and strlen($login)<20 and strlen($pass)>=4 and strlen($pass)<12 and strlen($repass)>=4 and strlen($repass)<12))
                return -3;
            $res=$this->mysqli->query('SELECT id from users where login="'.$login.'" ');
            if($res->num_rows==1){
                return -1;
            }
            if($pass!=$repass)
                return -2;
            
            if($this->mysqli->query('insert into users (login,pass,priv) VALUES ("'.$login.'","'.$pass.'",0)')===TRUE){
                session_start();
                $_SESSION['login']=$login;
                $_SESSION['priv']=0;
                return 1;
            }
            else return -4;
            
        }
        
        function loggingin(){
            
            if(isset($_SESSION['login']))
                return true;
            else false;
        }
        
        
    }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.01.2017, 13:14
Ответы с готовыми решениями:

Качество воспроизведения на Youtube. Разные WiFi, разное качество
Здарова народ. У меня дома стоит инет от Билайна (естественно роутер с WiFi). Так вот, когда я смотрю ролики с андроид телефона на Youtube...

Как возвратить поля Users + поля Doctors, где Doctors наследует Users
Есть БД в которой есть 2 таблички - Users и Doctors Doctors наследується от Users (тоисть владеет полями и Users и своим) Есть...

Класс Users
Здравствуйте,уважаемые.У меня появилась одна проблема.Суть-я делая фотоальбом.Есть классы &quot;Фото&quot;,&quot;Категория&quot; и...

14
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
21.01.2017, 14:00
Цитата Сообщение от McFair Посмотреть сообщение
адекватен ли он
Абсолютно неадекватен.

1) defined, global, возврат кодов (-1) - древнее зло. Уж хотя бы boolean возвращали.
2) жесткая зависимость от mysqli, почитайте про инверсию зависимостей.
3) оформление ужас, имена переменных не очевидные. Почитайте PSR.
4) правила валидации дублируются
5) да, при таком подходе это будет божественный класс умеющий все что угодно. Авторизация, бд, юзер - это все разные классы.
6) про автозагрузку классов вы видимо тоже не слышали

Цитата Сообщение от McFair Посмотреть сообщение
в итоге из-за этого теряюсь, не знаю как правильнее
Представьте что вы ничего не знаете. Просто изучите заново, по порядку и что-нибудь современное. Можно с php7 начать. Потом уже ООП, SOLID, паттерны, MVC, фреймворки...
Цитата Сообщение от McFair Посмотреть сообщение
какому нибудь вебмастеру использовать мой чат бесплатно и с моей поддержкой
Проще готовый с гитхаба скачать...

Цитата Сообщение от McFair Посмотреть сообщение
Когда будет бета версия как и где мне ее осветить? чтобы узнать мнение более знающих людей о нем
Создайте публичный репозиторий на bitbucket/github. Потом ссылку на форумах кидайте, с просьбой прокомментировать.
0
0 / 0 / 3
Регистрация: 26.01.2017
Сообщений: 16
26.01.2017, 23:44
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/****
 * Главный файл  data.php
*/
session_start();
session_name('ProjectName');
 
 
 
 
 
/***
 * class DB MYSQL
*/
class DB
{
    public function connect()
    {
        try 
        {
            $mysqli = new mysqli("example", "user", "password", "dbase");
            
        }catch(\Exception $ex)
        {
            die($ex->getMessage());
        }
        
        return $mysqli;
    }
}
 
 
/***
 *  New Class "Users"
*/
class Users implements UsersInterface
{
    protected $db;
    
    public function __construct()
    {
        $this->db = new (new DB())->connect();
    }
    
    /***
     * Авторизация
     *
     * return int
    */
    public function Auth($login = null, $password = null)
    {
        //  -1 странное
        //  return должен быть один
        //  session_start() объявите в главном файле а не в классе
 
        return 0;
    }
    
    /***
     * Регистрация
     *
     * return int
    */
    public function Registration($data = [])
    {
        $data['login'] = 'login';
        $data['pass']  = 'password';
        $data['repass'] = 'repass';
        
        //  -1 странное
        //  return должен быть один
        //  session_start() объявите в главном файле а не в классе
        
        return 0;
    }
    
    /***
     * Выйти из учетной записи
     *
     * return int
    */
    public function Logout()
    {       
    }
}
0
Эксперт PHP
3900 / 3238 / 1353
Регистрация: 01.08.2012
Сообщений: 10,914
26.01.2017, 23:50
Шамсудин, что это за жесть?
0
0 / 0 / 3
Регистрация: 26.01.2017
Сообщений: 16
26.01.2017, 23:56
Jodah, Это не жесть

data.php - Главный класс

-- components
-- db.php
-- users.php

Добавлено через 50 секунд
Это пример а не полная реализация.

Добавлено через 42 секунды
Я его класс направил в правильное русло!

Добавлено через 2 минуты
PHP
1
2
3
4
5
6
    protected $db;
    
    public function __construct()
    {
        $this->db = new (new DB())->connect();
    }
Если вы про это - то конечно так не делает для этого Pattern`s есть, опять повторюсь его класс направил в правильное русло, чтобы был более читабелен.
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
27.01.2017, 10:34
Цитата Сообщение от Шамсудин Посмотреть сообщение
его класс направил в правильное русло
И в каком месте русло правильное? Как был God Object, так и остался.
1
0 / 0 / 3
Регистрация: 26.01.2017
Сообщений: 16
27.01.2017, 12:40
Jewbacabra, Дорогой ты мои непонимающий умник "который хочет казаться умнее", это ничто иное как констатация факта.

1). Повторюсь еще, это пример, просто каркас класса.
2). Я программированием занимаюсь больше 9 лет, не стоит учить меня что к чему.
3). Автор темы хотел сделать качественный класс, я ему предоставил пример а не полную реализацию класса с интерфейсами и паттернами.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
27.01.2017, 12:49
Шамсудин, здесь ничего правильного нет. Даже если забыть про new new, с чего бы это в конструкторе класса User выполнять коннект к БД? И каким образом аутентификация вдруг стала синонимом данных пользователя? Класс User должен содержать информацию о пользователе - его имя, логин, и т.п., а не авторизацию/регистрацию пользователя. И замечания абсолютно верные, а на то, сколько лет и что вы там делали, в общем-то, всем все равно. Тем более что можно программировать и 20 лет, но не используя ООП - и в итоге его не понимать.
0
0 / 0 / 3
Регистрация: 26.01.2017
Сообщений: 16
27.01.2017, 12:53
KOPOJI, О господи боже мой, я знаю это, извините пожалуйста вы вообще читаете посты выше или просто зашли написали мнение и вышли.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
27.01.2017, 12:56
Шамсудин, в отличии от вас, читаю. А вы читаете ответы (заметьте, во множественном числе), что ваш пример является совершенно не верным и указывает неверное направление?
0
0 / 0 / 3
Регистрация: 26.01.2017
Сообщений: 16
27.01.2017, 13:03
Ладно, давайте на ссылочном языке.

http://symfony.com/doc/current... vider.html
http://symfony.com/doc/current... vider.html
https://github.com/laravel/fra... inate/Auth


Надеюсь, до вас хоть сейчас дойдет, как реализовывается полная структура для работы с пользователями и архитектура написание класса

Добавлено через 5 минут
Класс создается так:

PHP
1
2
3
class Users implements UsersInterface
{
}
а не так

PHP
1
2
3
 defined('CHAT') or die('access denied');
    class user{
    }
Методы создаются так:
PHP
1
2
3
4
5
public function Registration($data = [])
{
 
    return 0;
}
А не так
PHP
1
2
function reg($login,$pass,$repass){
}

Еще хотел донести что не стоит использовать отрицательные числовые значения "-1, -3, -4"

PHP
1
2
$_SESSION - null; //тоже не нужно использовать к классе
$this->mysqli->query; //тоже неправильно

Капец, вам будет проще это понять когда изучите C++, Python
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
27.01.2017, 13:06
Первая ссылка, класс User:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
class User implements UserInterface, \Serializable
{
    /**
     * @ORM\Column(type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;
 
    /**
     * @ORM\Column(type="string", length=25, unique=true)
     */
    private $username;
 
    /**
     * @ORM\Column(type="string", length=64)
     */
    private $password;
 
    /**
     * @ORM\Column(type="string", length=60, unique=true)
     */
    private $email;
 
    /**
     * @ORM\Column(name="is_active", type="boolean")
     */
    private $isActive;
 
    public function __construct()
    {
        $this->isActive = true;
        // may not be needed, see section on salt below
        // $this->salt = md5(uniqid(null, true));
    }
 
    public function getUsername()
    {
        return $this->username;
    }
 
    public function getSalt()
    {
        // you *may* need a real salt depending on your encoder
        // see section on salt below
        return null;
    }
 
    public function getPassword()
    {
        return $this->password;
    }
 
    public function getRoles()
    {
        return array('ROLE_USER');
    }
 
    public function eraseCredentials()
    {
    }
 
    /** @see \Serializable::serialize() */
    public function serialize()
    {
        return serialize(array(
            $this->id,
            $this->username,
            $this->password,
            // see section on salt below
            // $this->salt,
        ));
    }
 
    /** @see \Serializable::unserialize() */
    public function unserialize($serialized)
    {
        list (
            $this->id,
            $this->username,
            $this->password,
            // see section on salt below
            // $this->salt
        ) = unserialize($serialized);
    }
}
Цитата Сообщение от KOPOJI Посмотреть сообщение
с чего бы это в конструкторе класса User выполнять коннект к БД? И каким образом аутентификация вдруг стала синонимом данных пользователя? Класс User должен содержать информацию о пользователе - его имя, логин, и т.п., а не авторизацию/регистрацию пользователя
Что и видим наглядно по ссылке, про что я и говорил (и не только я).
Дальнейшие коды на этой странице только продолжают это подтверждать.
Дальше, вторая страница:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class WebserviceUserProvider implements UserProviderInterface
{
    public function loadUserByUsername($username)
    {
        // make a call to your webservice here
        $userData = ...
        // pretend it returns an array on success, false if there is no user
 
        if ($userData) {
            $password = '...';
 
            // ...
 
            return new WebserviceUser($username, $password, $salt, $roles);
        }
 
        throw new UsernameNotFoundException(
            sprintf('Username "%s" does not exist.', $username)
        );
    }
 
    public function refreshUser(UserInterface $user)
    {
        if (!$user instanceof WebserviceUser) {
            throw new UnsupportedUserException(
                sprintf('Instances of "%s" are not supported.', get_class($user))
            );
        }
 
        return $this->loadUserByUsername($user->getUsername());
    }
 
    public function supportsClass($class)
    {
        return WebserviceUser::class === $class;
    }
}
Обратите внимание - WebserviceUserProvider/WebserviceUser, никак не User - именно там выполняется авторизация.
По третьей ссылке авторизация здесь https://github.com/laravel/fra... ovider.php
И опять не класс User

И кому вы что-то доказываете, себе?
0
0 / 0 / 3
Регистрация: 26.01.2017
Сообщений: 16
27.01.2017, 13:09
Желательнее даже так


PHP
1
2
3
4
5
public function nameFunct()  : string
{
 
    return "Определить какой тип будет результатным (int,floar,string) или же метод из Интерфейса (стандарты 7 >) ";
}
Добавлено через 1 минуту
KOPOJI, Алилуя наконец дошло до вас.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
27.01.2017, 13:10
Цитата Сообщение от Шамсудин Посмотреть сообщение
Капец, вам будет проще это понять когда изучите C++, Python
Представьте, я знаком с обоими этими языками. Вы это написали исключительно чтобы что-то доказать или что? Или что, парадигма ООП строится по другому пути в C++, и класс User там должен превратиться в GodObject ?
0
0 / 0 / 3
Регистрация: 26.01.2017
Сообщений: 16
27.01.2017, 13:12
Ну теперь вы поняли что я просто каркас реализации ему написал.

Естественно: ORM нужно использовать для базы данных
Структура комментариев к классу по PHPDoc
3). Именно третья должна быть реализация.


Правда я тупанул чуток, надо было изначально предоставить ссылки Symfony

Добавлено через 1 минуту
KOPOJI, Если вы знаете я очень уважаю вас, честно очень.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.01.2017, 13:12
Помогаю со студенческими работами здесь

Logedin users
Здравствуйте, Помогите пожалуйста, написа программу на java. Суть программы: Пользователь, регестрируится на сайт, делает login и видит...

Notes Users
Добрый день! В клиенте notes administrator есть представление &quot;Notes users&quot;, а вот как к нему добраться программно?

Notes Users
Господа администраторы, подскажите мне, пожалуйста, следующую штуку: Открываю я в Администраторе Server…-&gt;Status-&gt;Notes Users (или...

Таблицы users
Два разных скрипта -две БД необходимо их объеденить , так чтоб юзер зарегившись в одной появлялся во второй -возможно ли такое?

Roaming Users
в принципе использую но не с опциями Roaming users.. есть пользователи кот. конектяться с буков через пастру сервер, все работает...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru