[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Ликвиден ли такой длинный класс
lans8097
Ликвиден ли такой длинный класс
класс добавляет пользователей через админку


<?php
class
AddUse{
private $templating;
private $sql;
private $tpl;

private $login;
private $password;
private $password2;
private $email;
private $name;
private $surname;
private $age_d;
private $age_m;
private $age_y;
private $age_mkTime;
private $country;
private $city;
private $isq;
private $skype;
private $vk;
public $Grup;
public $ChekedAction;
public $ChekedBot;
public $ChekedBaned;

public $Errors;
public $Goods;

//Параметры влидации
public $MinSimbolsName =2;
public $MaxSimbolsName =20;
public $MinSimbolsLogin=2;
public $MaxSimbolsLogin=5;
public $MinSimbolspassword=3;
public $MaxSimbolspassword=20;

//Параметры генерации меню даты
public $MinYear =1880;//С какова года
public $MaxYear =2012;//По какой год
public $MinDey =1; //С какова Дня
public $MaxDey =31; //По какой День
public $Minmonth=1; //С какова Месяца
public $Maxmonth=12; //По какой Месяц

//Параметры валидации

public $ValidLogin=TRUE;
public $ValidStrlenLogin=TRUE;
public $ValidStatusLogin=TRUE;

//Валидация пароля
public $ValidPassword=TRUE;
public $ValidStrlenPasword=TRUE;
public $ValidIdentityPasswords=TRUE;

//Валидация емайла
public $ValidEmail=TRUE;
public $ValidStatusEmail=TRUE;

//Валидация Даты рождения
public $ValidAge=FALSE; //Проверяет допустимость временного диапазона

//Валидация группы

public $ValidGrup=TRUE;

function __construct() {
$this->sql = Sql::getInstance();
$this->templating = new templating();
$this->templating->ModDir('users');
$this->tpl = $this->templating->ModLoad('AddUser');
//Указываем максимальный и минимальный год
$this->MaxYear = date('Y');
$this->MinYear = $this->MaxYear-150;
}


//Запись и обработка данных класса
function InsertDataVar(){
function trash($string){return trim(strip_tags(addslashes($string)));}
//Чистим от мусора и записсываем строки в класс
$this->login = trash($_POST['login']);
$this->password = trash($_POST['password']);
$this->password2= trash($_POST['password2']);
$this->email = trash($_POST['email']);
$this->name = trash($_POST['name']);
$this->surname = trash($_POST['surname']);
$this->age_d = intval($_POST['age_d']);
$this->age_m = intval($_POST['age_m']);
$this->age_y = intval($_POST['age_y']);
$this->country = trash($_POST['country']);
$this->city = trash($_POST['city']);
$this->isq = trash($_POST['isq']);
$this->skype = trash($_POST['skype']);
$this->vk = trash($_POST['vk']);
$this->Grup = intval($_POST['Grup']);
$this->ChekedAction= intval($_POST['ChekedAction']);
$this->ChekedBot = intval($_POST['ChekedBot']);
$this->ChekedBaned = intval($_POST['ChekedBaned']);

//Устовавливаем булив тип на флаги
if($this->ChekedAction==1){$this->ChekedAction=true;}else{$this->ChekedAction=false;}
if($this->ChekedBaned==1) {$this->ChekedBaned=true;}else {$this->ChekedBaned=false;}
if($this->ChekedBot==1) {$this->ChekedBot=true;}else {$this->ChekedBot=false;}

//Конвектируем дату в сикунды
$this->age_mkTime = mktime(0,0,0,$this->age_m,$this->age_d,$this->age_y);

}

//Валидация данных класса
function AutoValid(){
//Валидация логина
if($this->ValidLogin){
$this->ValidLogin();
}

//Валидация мыла
if($this->ValidEmail){
$this->ValidEmail();
}

//Валидация пароля
if($this->ValidPassword){
$this->ValidPassword();
}


//Валидация группы
if($this->ValidGrup){
$this->ValidGrup();
}

//Валидация даты рождения
if($this->ValidAge){
$this->ValidAge();
}

if(!empty($this->Errors)){
return false;}else{
return true;}
}


/*Валидаторы*/

//Валидатор логина

function ValidLogin(){
if(empty($this->login)){$this->Errors[]='Вы не ввели логин';return;}
if($this->ValidStrlenLogin){
$simbols = iconv_strlen($this->login,'utf-8')-1;
if($simbols < $this->MinSimbolsLogin & $simbols > $this->MaxSimbolsLogin){
$this->Errors[]='Длина логина должна быть не белее чем ("'.$this->MaxSimbolsLogin.'") и не менее чем ("'.$this->MinSimbolsLogin.'") симвалов';
}
}


if($this->ValidStatusLogin){
$this->sql->select('`id`,`login`','users',"`login`='".$this->sql->slesh($this->login)."'");
if($this->sql->num_rows()){
$this->Errors[] ='Данный логин уже используется другим пользователем';
}
}

}


//Валидатор мыла
function ValidEmail(){
if(empty($this->email)){$this->Errors[]='Вы не ввели Email';return;}
if(!is_email($this->email)){
$this->Errors[] ='Вы ввели некорректный адрес электронной почты';
}elseif($this->ValidStatusEmail){
$this->sql->select('`id`,`email`','users',"`email`='".$this->sql->slesh($this->email)."'");
if($this->sql->num_rows()){
$this->Errors[] ='Данный почтовый адрес уже используется другим пользователем';
}
}

}


//Валидатор пароля
function ValidPassword(){
if(empty($this->password)) {$this->Errors[]='Вы не ввели Пароль';return;}
if(empty($this->password2)){$this->Errors[]='Вы не ввели Потверждение пароля';return;}
if($this->ValidStrlenPasword){
$simbols = iconv_strlen($this->password, 'utf-8');
$simbols2 = iconv_strlen($this->password2,'utf-8');
if($simbols < $this->MinSimbolspassword |
$simbols > $this->MaxSimbolspassword |
$simbols2 < $this->MinSimbolspassword |
$simbols2 > $this->MaxSimbolspassword){
$this->Errors[]='Длина пароля должна быть не белее чем ("'.$this->MaxSimbolspassword.'") и не менее чем ("'.$this->MinSimbolspassword.'") симвалов';
}
}


if($this->ValidIdentityPasswords){
if($this->password!==$this->password2){
$this->Errors[]='Поля "Пароль" и "Подтверждение пароля" не совпадают';
}
}


}


//Валидатор группы
function ValidGrup(){
if(empty($this->Grup)) {$this->Errors[]='Вы не указали Группу';return;}
$this->sql->query("SELECT `grup_id` FROM `grups` WHERE `grup_id`='".$this->Grup."'");
if(!$this->sql->num_rows()){
$this->Errors[]='Группы по указанному идентификатору не существует';
}
}


//Валидатор даты рождения
function ValidAge(){
if($this->age_d > $this->MaxDey | $this->age_d < $this->MinDey |
$this->age_m > $this->Maxmonth | $this->age_m < $this->Minmonth |
$this->age_y > $this->MaxYear | $this->age_y < $this->MinYear){
$this->Errors[]='Не правельный формат даты рождения.';
}
}


/*/Валидаторы*/

function PasswordMd5(){
return md5(md5(sqlslesh($this->password)).'i87dw87fc');
}

function DateMenu_D(){
for($i=1;$i<=$this->MaxDey;$i++){
if($i<10){$d ='0'.$i;}else{$d =$i;}
if($this->age_d == $i){$selected='SELECTED';}else{unset($selected);}
$menu .='<option value="'.$d.'" '.$selected.'>'.$d.'</option>';
}
return $menu;
}

function DateMenu_M(){
for($i=1;$i<=$this->Maxmonth;$i++){
if($i<10){$m ='0'.$i;}else{$m =$i;}
if($this->age_m == $i){$selected='SELECTED';}else{unset($selected);}
$menu .='<option value="'.$m.'" '.$selected.'>'.$m.'</option>';
}
return $menu;
}

function DateMenu_Y(){
for($this->MaxYear;$this->MinYear<=$this->MaxYear;$this->MaxYear--){
if($this->age_y == $this->MaxYear){$selected='SELECTED';}else{unset($selected);}
$menu .='<option value="'.$this->MaxYear.'" '.$selected.'>'.$this->MaxYear.'</option>';
}
return $menu;
}

function GrupsMenu(){
$this->sql->select('*','grups');
if($this->sql->num_rows()){
while($result = $this->sql->fetch_assoc()){
$menu .='<option value="'.$result['grup_id'].'">'.$result['grup_name'].'</option>';
}
return $menu;
}
}


function Errors(){
if(is_array($this->Errors)){
foreach($this->Errors as $error){
$errors .='<p>'.$error.'</p>';
}
return $errors;
}
}


function ChekedAction(){if($this->ChekedAction){return 'checked';}}

function ChekedBaned(){if($this->ChekedBaned){return 'checked';}}

function ChekedBot(){if($this->ChekedBot){return 'checked';}}

function Goods(){

if(is_array($this->Goods)){
foreach($this->Goods as $Good){
$Goods .='<p>'.$Good.'</p>';
}
return $Goods;
}
}


function TplObr(){
$this->tpl = strtr($this->tpl,array(
'{login}' =>stripcslashes($this->login),
'{email}' =>stripcslashes($this->email),
'{name}' =>stripcslashes($this->name),
'{surname}'=>stripcslashes($this->surname),
'{age_d}' =>$this->DateMenu_D(),
'{age_m}' =>$this->DateMenu_M(),
'{age_y}' =>$this->DateMenu_Y(),
'{country}'=>stripcslashes($this->country),
'{city}' =>stripcslashes($this->city),
'{isq}' =>stripcslashes($this->isq),
'{skype}' =>stripcslashes($this->skype),
'{vk}' =>stripcslashes($this->vk),
'{Grup}' =>$this->GrupsMenu(),
'{Error}' =>$this->Errors(),
'{Goods}' =>$this->Goods(),
'{ChekedAction}'=>$this->ChekedAction(),
'{ChekedBot}' =>$this->ChekedBot(),
'{ChekedBaned}' =>$this->ChekedBaned()
));

}

function AddUse(){
$this->sql->insertArray('users',array(
'login' =>mysql_real_escape_string($this->login),
'email' =>mysql_real_escape_string($this->email),
'password' =>$this->PasswordMd5(),
'grup' =>$this->Grup,
'baned' =>$this->baned,
'activation'=>$this->ChekedAction,
'bot' =>$this->ChekedBot
),NULL,FALSE);
if($this->sql->insert_id){
$id = $this->sql->insert_id;
unset($this->sql->insert_id);
$this->sql->insertArray('users_profile',array(
'user_id'=>$id,
'name' =>mysql_real_escape_string($this->name),
'surname'=>mysql_real_escape_string($this->surname),
'age' =>$this->age_mkTime,
'country'=>mysql_real_escape_string($this->country),
'city' =>mysql_real_escape_string($this->city),
'isq' =>mysql_real_escape_string($this->isq),
'skype' =>mysql_real_escape_string($this->skype),
'vk' =>mysql_real_escape_string($this->vk)
),
NULL,FALSE);
if($this->sql->insert_id){
$this->Goods[]= 'Пользователь успешно создан';
return true;
}else{
$this->Errors[]='Не удалось создать профиль';
//Удоляем созданный профиль
$this->sql->delete('users',"WHERE `id`='".$id."'");
}
}
else{
$this->Errors[]='Не удалось добавить пользователя';}
}


function Wiev(){return $this->tpl;}
}

?>
/////////////////Вызов класса
<?php
function
AddUse(){
$this->obj = new AddUse();
if(!empty($_POST['AddUserStartButton'])){
$this->obj->InsertDataVar();
if($this->obj->AutoValid()){
if($this->obj->AddUse()){
echo 'Пользователь добавлен';
}
}

$this->obj->TplObr();
$this->tpl = $this->obj->Wiev();
}else{
$this->obj->TplObr();
$this->tpl = $this->obj->Wiev();
}
}





Спустя 4 часа, 30 минут, 26 секунд (9.09.2012 - 08:18) johniek_comp написал(а):
размер не главное! (с)

Спустя 6 минут, 21 секунда (9.09.2012 - 08:24) lans8097 написал(а):
Цитата (johniek_comp @ 9.09.2012 - 05:18)
размер не главное! (с)

Просто показал знакомаму он сказал что очень плохо когда классы за 200 строк.
Я конечно магу написать с минимум табуляции абзацев итд но оно будит практически не читабельно.
Я делаю так чтобы мне было удобно и приятно ориентироваться в коде даи самниваюсь что эти отступы серёзно влияют на производительность

Спустя 1 час, 11 минут, 8 секунд (9.09.2012 - 09:35) johniek_comp написал(а):
lans8097
Цитата
очень плохо когда классы за 200 строк.

обычно классы по 600-1000 строк пишут...

на производительность ни как не повлияет, но:
1. Почитай про тернарный оператор.
2. WTF? ф-я trash делает в другой функции?
3. Не понял сути...
if($this->sql->insert_id){
$id = $this->sql->insert_id;
unset($this->sql->insert_id);

а потом
 if($this->sql->insert_id){

???

Спустя 49 минут, 2 секунды (9.09.2012 - 10:24) Dezigo написал(а):
Всё сводиться к тому, что нельзя оценивать класс по количеству строк. Это ГЛУПО.
Всё берёт с собою проектирования, это выше этап, чем просто писать код.
1. Заметь у тебя класс делает ВСЁ , начиная ( добавления в БД, выборка, валидация)
2. Раздели главные моменты.
Валидация ,для неё создай отдельно класс.
И у тебя будет
  • 1. Класс валидации email
  • 2. Класс валидации username
  • 3. Класс валидации password
  • 4. и т.д

Тогда ты избавишься от объявление переменных в классе + проверки метода в классе.
3. Вот это вот
            while($result =  $this->sql->fetch_assoc()){
$menu .='<option value="'.$result['grup_id'].'">'.$result['grup_name'].'</option>';
}
ret

Так не делай, класс должен работать с данными, который в конце концов, можно будет обработать. Возвращай массив.

В противном случае, всё можно засунуть в класс, а нужно ли?

Спустя 1 час, 24 минуты, 25 секунд (9.09.2012 - 11:49) Guest написал(а):
"Чистый код" Мартина - помогает промыть извилины smile.gif
http://www.kodges.ru/84462-chistyj-kod.-so...efaktoring.html

Спустя 58 минут, 46 секунд (9.09.2012 - 12:47) lans8097 написал(а):
Цитата (johniek_comp @ 9.09.2012 - 06:35)
lans8097
Цитата
очень плохо когда классы за 200 строк.

обычно классы по 600-1000 строк пишут...

на производительность ни как не повлияет, но:
1. Почитай про тернарный оператор.
2. WTF? ф-я trash делает в другой функции?
3. Не понял сути...
if($this->sql->insert_id){
$id = $this->sql->insert_id;
unset($this->sql->insert_id);

а потом
 if($this->sql->insert_id){

???

На щёт двух insert_id & unset
Просто sql клас ещо не до конца дописан он не вычищает старый индефикатор

Спустя 2 минуты, 17 секунд (9.09.2012 - 12:50) lans8097 написал(а):
Цитата (Dezigo @ 9.09.2012 - 07:24)
Всё сводиться к тому, что нельзя оценивать класс по количеству строк. Это ГЛУПО.
Всё берёт с собою проектирования, это выше этап, чем просто писать код.
1. Заметь у тебя класс делает ВСЁ , начиная ( добавления в БД, выборка, валидация)
2. Раздели главные моменты.
Валидация ,для неё создай отдельно класс.
И у тебя будет
  • 1. Класс валидации email
  • 2. Класс валидации username
  • 3. Класс валидации password
  • 4. и т.д
Тогда ты избавишься от объявление переменных в классе + проверки метода в классе.
3. Вот это вот
            while($result =  $this->sql->fetch_assoc()){
$menu .='<option value="'.$result['grup_id'].'">'.$result['grup_name'].'</option>';
}
ret

Так не делай, класс должен работать с данными, который в конце концов, можно будет обработать. Возвращай массив.

В противном случае, всё можно засунуть в класс, а нужно ли?

я тоже об этом думал но както решил так написать
В следующий раз папробую сделать раздельные моменты.
За советы спс.
А что вы можете сказать в замечании кода ?

Спустя 1 час, 16 минут, 44 секунды (9.09.2012 - 14:06) Dezigo написал(а):
    1. Перед тем как объявить метод обязательно пиши идентификатор доступа
    public,protected,private (просто привыкни )

    public function test() {

    }

    2.

      //Параметры влидации
    public $MinSimbolsName =2;
    public $MaxSimbolsName =20;
    public $MinSimbolsLogin=2;
    public $MaxSimbolsLogin=5;
    public $MinSimbolspassword=3;
    public $MaxSimbolspassword=20;

    Объяви их как константы в классе

    const 
    MIN_SYMBOLS_NAME= 2,
    MAX_SYMBOLS_NAME= 5;


    3. небрежное название методов и переменных, тебе нужно придерживаться каково нибудь стиля.
    Например
    метод TplObr
    - не должен начинаться с большо буквы, только классы так называют , ну и переменные.
    Например
    http://pear.php.net/manual/en/standards.funcdef.php


3 стандарта ( который вспомнил ) , выбырай любой
    Zend Coding Standard
    PEAR Coding Standard
    Horde Coding Standards
В остальном всё хорошо , да и когда даёшь название , не поленись проверить грамматику. MinSimbolsLogin

Спустя 2 часа, 24 минуты, 21 секунда (9.09.2012 - 16:31) Invis1ble написал(а):
Может я чего-то не знаю, но ликвидность вроде как экономический термин. Причем здесь класс?
Быстрый ответ:

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