Улучшение моего класса пользователя


Я до сих пор неудобно и нового работа с классами.

Я сделал пользовательский класс, который будет возвращать вещи о пользователе.

<?

class User {
    public function age($id) {
        $birth = new DateTime("$id");
        $now = new DateTime();
        $age = $now->diff($birth)->format("%y");
        return $age;
    }
    public function avatar($id) {
        $connect = Database::factory();

        $id = $id;
        $getQuery = $connect->prepare("SELECT photo_thumb FROM users_profile WHERE uID =:id");
        $getQuery->bindValue(":id", $id);
        $getQuery->execute();
        $show = $getQuery->fetch();
        $photoName = ((empty($show['photo_thumb'])) ? '' : $show['photo_thumb']);
        return $photoName;
    }
    public function fullname($id, $full = 1) {
        $connect = Database::factory();
        $query = $connect->prepare("SELECT firstname, lastname FROM users WHERE id =:id");
        $query->bindValue(":id", $id);
        $query->execute();
        $row = $query->fetch();

        $full_name = $row["firstname"]." ".$row["lastname"];
        return $full_name;
    }
    public function firstname($id) {
        $connect = Database::factory();
        $query = $connect->prepare("SELECT firstname, lastname FROM users WHERE id = '$id'");
        $query->execute();
        $row = $query->fetch();
        $firstname = $row["firstname"];
        return $firstname;
    }
    public function sex($id) {
        $connect = Database::factory();

        $query = $connect->prepare("SELECT sex FROM users WHERE id=:id");
        $query->bindValue(":id", $id);
        $query->execute();
        $row = $query->fetch();
        return $row["sex"];
    }
}

Если вы посмотрите через него быстро, вы заметите, как все же, помимо захвата еще одно название столбца и иногда из другой таблицы.

В противном случае это просто выполнить, извлекает и возвращает.

Интересно, если я могу улучшить этот код любым способом, чтобы он выглядел чище и не так копировать+вставить, как сейчас..



265
2
php
задан 9 августа 2011 в 11:08 Источник Поделиться
Комментарии
1 ответ

Короче : это очень плохой кусок кода.

Вот список и "почему":


  • вы смешиваете доступа к данным с помощью логики ( SQL-запросы должны обрабатываться другой объект )

  • вы используете глобальное состояние для доступа к БД

  • есть какой-то мистический параметр $полный в full_name() метод

  • все эти методы геттеры

  • SQL-запросов происходит каждый раз, когда вы использовать геттер

  • параметр $ID не означает ничего ( это строка , число , какой-то другой объект ? )

В основном то, что у вас есть пять самостоятельных процедур, завернутый в класс только для шоу.

3
ответ дан 10 августа 2011 в 12:08 Источник Поделиться