- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 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
/**
* Обновление информации о пользователе
*
* @param integer $user_id
* @param array $data
* @return Zend_Db_Statement_Pdo
*/
public function updateProfile($user_id, $data)
{
// TODO: сделать человеческую валидацию
$params = $keys = array();
if ($data['login'] !== NULL) {
$keys[] = 'u_login = ?';
$params[] = $data['login'];
}
if (Zend_Validate::is($data['email'], 'EmailAddress')) {
$keys[] = 'u_email = ?';
$params[] = $data['email'];
}
if ($data['sname'] !== NULL) {
$keys[] = 'u_sname = ?';
$params[] = $data['sname'];
}
if ($data['name'] !== NULL) {
$keys[] = 'u_name = ?';
$params[] = $data['name'];
}
if ($data['fname'] !== NULL) {
$keys[] = 'u_fname = ?';
$params[] = $data['fname'];
}
if ($data['birthdate'] !== NULL) {
$keys[] = 'u_birthdate = ?';
$params[] = $data['birthdate'];
} else {
$keys[] = 'u_birthdate = NULL';
}
if ($data['city'] !== NULL) {
$keys[] = 'u_c_id = ?';
$params[] = (int) $data['city'];
}
if ($data['info'] !== NULL) {
$keys[] = 'u_info = ?';
$params[] = $data['info'];
}
if ($data['sign'] !== NULL) {
$keys[] = 'u_sign = ?';
$params[] = $data['sign'];
}
if ($data['sex'] === 'M' OR $data['sex'] === 'F') {
$keys[] = 'u_sex = ?';
$params[] = $data['sex'];
}
if ($data['subscribe'] === 'on' AND ($data['subtype'] === 'T' OR $data['subtype'] === 'H')) {
$keys[] = 'u_subscribed = ?';
$params[] = $data['subtype'] === 'T' ? 1 : 2;
} else {
$keys[] = 'u_subscribed = ?';
$params[] = 0;
}
$sql = 'UPDATE users SET ' . implode(', ', $keys) . ' WHERE u_id = ' . (int) $user_id;
$query = $this->db->query($sql, $params);
$this->clearUserCache($user_id);
return $query;
}
Анонимус 26.08.2010 13:51 # +2
//TODO: Выучить ООП, перестать юзать хеши хешей
//TODO: Научится пользоваться константами
//TODO: Научится отделять логику от DAO
//TODO: Изучить prepared statemenets
3.14159265 26.08.2010 13:58 # +2
//TODO: Нанять человеческого программиста
не нанимать парней с некоторых стран Азии
user654321 26.08.2010 16:23 # +3
у нас это называется "массив массивович"
Lure Of Chaos 26.08.2010 18:20 # −1
Анонимус 26.08.2010 18:39 # 0
Lure Of Chaos 26.08.2010 18:22 # −1
Анонимус 26.08.2010 18:40 # 0
а Вы реально думаете что вместо объектов или структур лучше исползовать ассоциативные массивы?
nergal 26.08.2010 18:42 # 0
Анонимус 26.08.2010 18:48 # +2
2) Если опечататься, и вместо "sex" написать "six" (кстати пол по-английски будет "gender"), то у объекта PHP ругнется, что метода "getSix" нет. А так не ругется.
Вообще честно говоря я так вот не готов взять, и одним постом объяснить приимущества объектно-ориентированого подхода. Тут нужно читать серию лекций.
Lure Of Chaos 26.08.2010 19:32 # −1
Анонимус 26.08.2010 19:38 # 0
Вы тоже не понимаете зачем применять ООП?
Lure Of Chaos 26.08.2010 19:50 # 0
Если мы организовываем только структуру данных (как вот struct в С или record в Pascal) и нам не нужны действия с ними, то за ДРУГИМИ некоторыми исключениями подходы равнозначны.
Но если вдруг нам нужны и действия, то, конечно, лучше связать их с данными в традициях ООП
Анонимус 26.08.2010 19:53 # +1
Причем он не только в DAO, но и в бизнес-логике (хотя они тут и перемешанны).
Вы в джаве тоже Map используете вместо DTO? А в .NETе -- Dictionary?
Lure Of Chaos 26.08.2010 20:02 # 0
в джаве противоположная ситуация: предпочтительнее создать POJO сущность, поля и аксессоры, а Картами пользоваться только если требуется динамичность
Анонимус 26.08.2010 20:06 # +1
phpstorm даже геттеры и сеттеры умеет генерить.
Знаю-знаю, необходимость его подключения, правда?
Lure Of Chaos 26.08.2010 20:19 # 0
Анонимус 26.08.2010 20:21 # +1
Lure Of Chaos 26.08.2010 20:25 # −1
Анонимус 26.08.2010 20:27 # +1
Кроме того классы можно генерить по структуре базы (так много кто делает в языках, отличных от PHP)
Lure Of Chaos 26.08.2010 20:31 # −1
А кроме того, можно воспользоваться ORM
Анонимус 27.08.2010 19:17 # +1
Потому что обращение к свойству можно переопределить (__get)
Анонимус 27.08.2010 19:18 # +1
с помощью __get -- мы получим их практически с аксессорами
Lure Of Chaos 27.08.2010 22:41 # −1
Анонимус 27.08.2010 22:43 # +1
Lure Of Chaos 27.08.2010 22:58 # −1
nergal 27.08.2010 09:34 # +2
2. Вы не внимательны - если в хэше не будет ключа sex, то он не пройдет по условию (хотя, по-хорошему там следовало бы добавить isset()) и не добавиться в запрос.
Объектно-ориентированный подход - это, конечно-же хорошо, но не стоит его применять полностью везде, как уже сказал Lure Of Chaos.
user654321 27.08.2010 17:48 # 0
nergal 27.08.2010 18:05 # +1
Анонимус 27.08.2010 18:59 # 0
Вы наверное имеете ввиду ассоциативный массив? Так вот он сделан для динамически изменяющихся данных.
bugmenot 27.08.2010 18:17 # 0
Анонимус 27.08.2010 18:58 # 0
cheef 27.08.2010 10:59 # +2
Т.е получается, что в случае с объектом мы реализовали совсем простой и функциональный интерфейс. А представьте теперь, что у пользователя есть какой-то счёт/аккаунт в торговой системе, и нужно вывести его баланс, а для этого нужно приконнектиться к удалённой торговой системе и спросить этот самый баланс. Какой интерфейс вы будете использовать, уже определились?
nergal 27.08.2010 11:08 # 0
cheef 27.08.2010 11:25 # +1
Во всех приличных фреймворках за валидацию отвечает ORM - это централизованно, удобно и "правильно", как я поясню ниже. Один из вариантов:
Честно говоря смотря на код, не вижу почему нельзя было бы сделать как в примере выше. Данные на входе - это данные пользователя. В каком виде они должны храниться и что из себя представлять (структура, формат, допустимые значения) должен знать сам объект класса User, а не какой-то там хитрый кастомный валидатор в виде массива.
nergal 27.08.2010 11:37 # 0
Анонимус 27.08.2010 19:01 # 0
Vasiliy 27.08.2010 11:38 # 0
вернет 0
cheef 27.08.2010 11:40 # 0
nergal 27.08.2010 11:42 # 0