Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (5) 1 2 [3] 4 5  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Геттеры и сеттеры
twin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15562
Пользователь №: 6543
На форуме: 8 лет, 2 месяца, 4 дня
Карма: 299

Трезвый :
5 лет, 11 месяцев, 13 дней


Цитата (AllesKlar @ 26.10.2015 - 05:04)
Должна же быть "Золотая середина"

Так об этом Сергей и говорит. И я полностью с этим согласен. Просто дело в том, что бытует мнение, что обращение к свойствам напрямую не есть best practics. Вот chee и засомневался, а действительно ли это так.


--------------------
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1780
Пользователь №: 38654
На форуме: 2 года, 11 месяцев, 4 дня
Карма: 40




Цитата (Michael @ 26.10.2015 - 07:59)
Вы для каждого столбца объявляете public св-во?
А как то следите например что не было изменений чтобы при save() не делать update?

Ну вообще надо объявлять паблик свойства, мы либо объявляем, либо нет. Отслеживание изменений происходит при сохранении в БД, но это для функции аудирования(журналирование полей).

Цитата (AllesKlar @ 26.10.2015 - 09:04)
вот тут мы пишем геттеры / сеттеры, для облегчения себе жизни, жизни тех, кто будет проект поддерживать в будущем, уменьшении временных затрат на разработку, экономия средств заказчика.

Это много раз сказано, но где примеры, что это улучшает жизнь. Проблема в том что в большинстве случаев, объекты не сами что-то решают, а мы им указываем. Еще в программах для установки значений в атрибуты сущностей обычно используют гидраторы, а это вообще слабо ложится на технологию сеттеров и геттеров. Геттеры и сеттеры, по моему, для того что бы писать код руками, а не бегать по белым спискам перебрасывая значения из объекта в объект


--------------------
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
bestxp  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



орангутанг
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2004
Пользователь №: 36605
На форуме: 3 года, 9 месяцев, 19 дней
Карма: 111




немного с другой стороны зайду я ( со стороны проектирования по модели или Domain Driven Desing ) DDD

Какие типы объектов есть вообще?

Mutable Immutable State то есть изменяемые, неизменяемые и объекты с состоянием ( конкретно эти типы тут и рассмотрим )

Первый тип изменяемый ( тот который на протяжении работы программы может меняться как угодно ) то есть

$obj = new AnyClass();
$obj->prop = 123;
-----


$obj->prop = $_POST['prop']

и тд сколько угодно раз

Неизменяемые объекты или Value объекты
$obj = new Currency('RUR');
echo $obj;


или

$sex = new Sex('Male');
echo $sex;


и наконец объекты состояние

$var = new Car('Nissan', 100 /* kilos */, 0 /* km/h */ );
echo $var->getState(); //stayed
$var->addPassenger(new Human('ed', new Sex('male'));
$var->run();
echo $var->getState(); //runned
echo $var->getSpeed(); //250 km/h
echo $var->addPassenger(new Human('Alice', new Sex('Female')); //throws exception you can't add passenger when car is runned


теперь это рассмотрим что к чему на 3ем примере где я собрал все воедино

Итак
Human это изменяемый объект в нашем случае потому что со стороны бюрократии и хирургии Ed может стать Alice и наоборот были бы деньги и желание

Но вот сам пол в нашем случае уже неизменяемый объект, как в случае и пример 2 с валютой потому что нам не нужно менять значение валюты да и смысла нет в этом, если нам нужно будет поменять валюту у товара то мы делаем setCurrency(new Currency('EUR'));

и наконец сама машина по сути некоторые свойства изменяемые, а некоторые нет, причем некоторые меняются сами в зависимости от состояние и некоторые изменяются только на определенных состояниях ( например пассажира добавить только когда стоит, в процессе пути ни убрать не добавить не сможем )

для чего это надо тут геттер и сеттер
для меня тру языком ООП является ObjectiveC поэтому накладывать буду на него и брать примеры

и так для чего может понадобиться сеттер
например преобразовать в правильный формат данные если оно будет нужно, например

class Entry{

protected $id;
protected $createdAt;

function __construnct(){
$this->createdAt = new \DateTime();
}

public function setCreatedAt($createdAt){
if(!($createdAt instanceOf \DateTime)){
$createdAt = new \DateTime($createdAt);
}
$this->createdAt = $createdAt;
return $this;
}
}


Иногда одна модель используется с разным типом хранилища в некоторых случаях для даты вернется объект в некоторых строка, если несколько источников данных то следить за типом лучше внутри и тогда добавляя данные мы можем их попытаться преобразовать к DateTime либо уже получим исключение что строка не является датой

Тут скорее подействует принцип Kiss и Dry чем плодить проверки в каждом хранилище мы это перенесем в этот объект
Бывает бизнес процессы требуют хранить и получать данные как в Api сторонних сервисов, так и в СУРБД или еще NoSQL, например если у вас какой-то сервис по обработке и аггрегации данных с возможностью уведомления ( количество сервисов для сбора данных будет расти, а модель одна )

Dry в действии, а так же замена на публичное грозит тем что либо куча проверок при вставке либо куча преобразований при получении

-------------

Теперь рассмотрим вариант Immutable данных в ObjC это readonly свойства , средствами PHP указать конкретному свойству что оно только для чтения нельзя, для этого приходят геттеры и сеттеры и еще магия

у нас есть массив с readOnly полями которые задаются при создании объекта и потом только для чтения и при попытке изменить получаем Исключение, в случае с публичными мы не можем контролировать изменения что в некоторых случаях может привести к ошибке ( например транзакция на оплату товара в сторонний сервис ) и что бы горе программист который будет работать с вами не изменил данные случайно и потом магазин не продал товар стоимостью 100 USD за 100 RUR

-------------

Прошу прощения если описал слишком не связно и сумбурно, если будут вопросы задавайте ( утро понедельника оно такое для меня )



--------------------
PMПисьмо на e-mail пользователюСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1780
Пользователь №: 38654
На форуме: 2 года, 11 месяцев, 4 дня
Карма: 40




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

Цитата (bestxp @ 26.10.2015 - 11:10)
замена на публичное грозит тем что либо куча проверок при вставке либо куча преобразований при получении

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


Цитата (bestxp @ 26.10.2015 - 11:10)
у нас есть массив с readOnly полями которые задаются при создании объекта и потом только для чтения и при попытке изменить получаем Исключение

Не понятно почему ограничение в коде имеют больший приоритет чем бизнесс правила? Почему все вещи, которые ты говоришь подразумевают активную работу с сеттерами/геттерами вручную?


--------------------
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
bestxp  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



орангутанг
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2004
Пользователь №: 36605
На форуме: 3 года, 9 месяцев, 19 дней
Карма: 111




chee
Цитата
Не понятно почему ограничение в коде имеют больший приоритет чем бизнесс правила?


где ты видишь больший приоритет?
Весь код который я мог бы показать относиться к DNA и показать я прав не имею =) только по моим расчетам лет через 5

реальность куда более жестокая нежели твои предположения что все будет смапено и тд, рахработку через прототип и говнокод никто не отменял , реалии разработки куда более жестокие =)

Например как один из источников данных вообще html страница которую ты парсишь или делает другой сотрудник =) Большинство зависит от архитектуры но все равно

Твои действия сейчас напоминают я уже перешел и решил перейти на паблик свойства, но вы должны меня убедить в обратном

-- я тебе дал куда более убедительные вещи =) далее сам решай


--------------------
PMПисьмо на e-mail пользователюСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Oyeme  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Reality is wrong. Dreams are for real
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1674
Пользователь №: 16955
На форуме: 7 лет, 9 месяцев, 11 дней
Карма: 94




Цитата
если в вашей практике случаи когда геттеры и сеттеры спасали положение и без них бы все печальнее было


Когда проект настолько большой и ему уже лет так 15, и ты понимаешь что setters тебе нужны не только для "установки значения", а что-то больше ,то это очень спасает тебя.

И ты понимешь что если бы ты обрящялся на прямую то тебе бы пришлось в ручную все переделаывать в 300-400 разных классах.

В некоторых случая setters можно расширить применяя валидаторы, a в некоторых данные можно обрабатывать на выходе.Что впринципе можно и cделать через DataService и делать mapping.


	/**
* Set numberSetFrom attribute value
*
* In case the numberSetTo value is set to NULL
* we set it to numberSetFrom value as it might be a sign
* of single number allocation and we wanna shade that out from developers.
*
*
@param string $numberSetFrom
*
@return \***\***\Model\
*/

public function setNumberSetFrom($numberSetFrom) {
$this->numberSetFrom = $numberSetFrom;

// set the number set to as well if not set yet
// to avoid the numberSetTo being null

if(!isset($this->getNumberSetTo())) {
$this->setNumberSetTo($numberSetFrom);
}

// return instance to model itself
return $this;
}


Все зависет от архитектуры.

Насчет скорости, это вообще не аргумент.

Как я уже говорил,хочешь скорости пиши все в 1 файл и не используй ООП.

Я лично всегда пратиктую и использую setters и getters.


--------------------
Programming: Private lessons via skype £45/h

Частные уроки в Лондоне / удаленно по skype.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1780
Пользователь №: 38654
На форуме: 2 года, 11 месяцев, 4 дня
Карма: 40




Oyeme, ну если использовать не только для установки/получения значений, то возникают ситуации когда нужно убрать дополнительную логику в сеттере или геттере. Также, мне не понятна логика с порядком вызовов этих сеттеров, ну то есть есть вот примерно такая же логика в сеттерах как у тебя в примере, получается, что чтобы все работало так как надо, нужно в правильном порядке вызывать сеттеры. Что я хочу сказать, если состояние сложно вычисляемое и установка его производится вручную, то есть вероятность не попасть в правильный порядок установки полей.
Цитата (bestxp @ 26.10.2015 - 12:39)
-- я тебе дал куда более убедительные вещи =) далее сам решай

Ты дал обобщенную теорию, обезличеную, не имеющую практического подтверждения. Я хочу реальную практику. Я все эти принципы понимаю, в теории они хороши, но проблема в том, что на практике я вижу не такие радужные вещи.
Цитата (bestxp @ 26.10.2015 - 12:39)
Твои действия сейчас напоминают я уже перешел и решил перейти на паблик свойства, но вы должны меня убедить в обратном

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

$accountId = $contact->get('account_id');
$opportunity->set('account_id', $accountId);

То есть близко к публичным, но все таки геттеры/сеттеры. Ну и паблик атрибуты в данном случае, как мне кажется будут более удачным решением.


--------------------
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Oyeme  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Reality is wrong. Dreams are for real
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1674
Пользователь №: 16955
На форуме: 7 лет, 9 месяцев, 11 дней
Карма: 94




Цитата
Также, мне не понятна логика с порядком вызовов этих сеттеров, ну то есть есть вот примерно такая же логика в сеттерах как у тебя в примере, получается, что чтобы все работало так как надо, нужно в правильном порядке вызывать сеттеры. Что я хочу сказать, если состояние сложно вычисляемое и установка его производится вручную, то есть вероятность не попасть в правильный порядок установки полей.


- В некоторых случаях setters могут стать приватными и только изменяться "внутри".
- Вы можите позволять читать данные из getters, а записывать нет.
- Вы можите сентезировать данные.

public function getfullName() {
return firstName + " " + lastName;
}


- Получая на входе boolean вы можите еще добавить туда свою логику и обработать.

Порядка вызова методов нет.


--------------------
Programming: Private lessons via skype £45/h

Частные уроки в Лондоне / удаленно по skype.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1780
Пользователь №: 38654
На форуме: 2 года, 11 месяцев, 4 дня
Карма: 40




Цитата (Oyeme @ 26.10.2015 - 15:36)
- Вы можите сентезировать данные.

Ну это уже не геттер, а метод для синтезации свойст объектов.


Цитата (Oyeme @ 26.10.2015 - 15:36)
Порядка вызова методов нет.

Для геттеров, для сеттеров же есть. Если же и нет, то значит логики в сеттерах нет.


--------------------
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15562
Пользователь №: 6543
На форуме: 8 лет, 2 месяца, 4 дня
Карма: 299

Трезвый :
5 лет, 11 месяцев, 13 дней


Цитата (Oyeme @ 26.10.2015 - 10:43)
Насчет скорости, это вообще не аргумент.
Как я уже говорил,хочешь скорости пиши все в 1 файл и не используй ООП
Вот сразу виден человек, который работает на заказ. У тех, кто работает на обслуживании, совсем другие взгляды. Как можно пренебрегать ресурсами ради эфимерной, сферической в вакууме, чисто гипотетической опасности...

Вон chee уже третью страницу бъется, просит реальный пример показать. А ему в уши дуют всякими гипотезами.

Цитата (Oyeme @ 26.10.2015 - 10:43)
Когда проект настолько большой и ему уже лет так 15,

Когда проекту 15 лет, он должен быть минимум три раза переписан полностью. Хотя бы из-за deprecated, не говоря уже о развитии технологий. А ты пугаешь народ пыльным мешком, что придется в нескольких местах что-то поменять. 300-400. Это что за проект такой, NASA? Здесь речь о сайтах идет. Нет в веб таких проектов и быть не может. На крайний случай есть магия.

А вот ресурс и скорость, это реально важно на больших проектах. Ибо конкуренция.


--------------------
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1780
Пользователь №: 38654
На форуме: 2 года, 11 месяцев, 4 дня
Карма: 40




Цитата (twin @ 26.10.2015 - 17:43)
Вон chee уже третью страницу бъется, просит реальный пример показать. А ему в уши дуют всякими гипотезами.

+1


--------------------
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11787
Пользователь №: 23195
На форуме: 6 лет, 4 месяца, 13 дней
Карма: 429

Трезвый :
7 лет, 3 месяца, 13 дней




--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Oyeme  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Reality is wrong. Dreams are for real
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1674
Пользователь №: 16955
На форуме: 7 лет, 9 месяцев, 11 дней
Карма: 94




Цитата
- В некоторых случаях setters могут стать приватными и только изменяться "внутри".
- Вы можите позволять читать данные из getters, а записывать нет.
- Вы можите сентезировать данные.


Чем это не аргумент?

Цитата
А ты пугаешь народ пыльным мешком, что придется в нескольких местах что-то поменять. 300-400. Это что за проект такой, NASA? Здесь речь о сайтах идет. Нет в веб таких проектов и быть не может. На крайний случай есть магия.


Примеры которые я привожу из личного опыта , а не с домашний стринички Васи пупкина.

В телекомуникациях, в банковских сверах,медецинская база данных.
Чтобы стянуть с git только обьем файлов, без картинок занимает под 800mb, и это только один проектик.

Цитата
А вот ресурс и скорость, это реально важно на больших проектах. Ибо конкуренция.


Оптимизировать нужно другие места а не..проект тормозит потому что "мы используем setters и getters" .


--------------------
Programming: Private lessons via skype £45/h

Частные уроки в Лондоне / удаленно по skype.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Oyeme  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Reality is wrong. Dreams are for real
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1674
Пользователь №: 16955
На форуме: 7 лет, 9 месяцев, 11 дней
Карма: 94




Цитата
Вот сразу виден человек, который работает на заказ. У тех, кто работает на обслуживании, совсем другие взгляды.


Инвестируя 100 тысяч долларов, Вы тратите одну и ту же энергии что инвестируете 100 миллионов долларов.


Я думаю Вам понятен намек к чему я клоню.


--------------------
Programming: Private lessons via skype £45/h

Частные уроки в Лондоне / удаленно по skype.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15562
Пользователь №: 6543
На форуме: 8 лет, 2 месяца, 4 дня
Карма: 299

Трезвый :
5 лет, 11 месяцев, 13 дней


Цитата (Oyeme @ 26.10.2015 - 14:24)
Чтобы стянуть с git только обьем файлов, без картинок занимает под 800mb, и это только один проектик.
И все эти 800 метров классов юзают одно и то же свойство. Я не знаю, может быть медицинская база и построена как то по особому, не имел дела. Но 99% веб-проектов юзают куда более прозаичные и не столь сильно связанные скрипты. И поменять свойство на геттер при сильной надобности - дело нескольких минут. Нет там никаких 300-400 мест. И быть не может.
Цитата (Oyeme @ 26.10.2015 - 10:43)
Я лично всегда пратиктую и использую setters и getters.
Это всего лишь личные предпочтения и привычки. Ничего общего с реалиями не имеют.
Цитата (Oyeme @ 26.10.2015 - 14:24)
Оптимизировать нужно другие места а не..проект тормозит потому что "мы используем setters и getters"
Оптимизировать нужно стараться все места. А не только те, которые не трогают привычек. Медицинская база, это конечно круто и сложно, но сильно сомневаюсь, что на ней очень большие нагрузки. Какой там трафик, тысяч 100 в сутки наскребтся? На таком трафике можно позволить себе загадывать на 15 лет вперед, как бы лишнюю букву не написать.


--------------------
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (5) 1 2 [3] 4 5  Ответ в темуСоздание новой темыСоздание опроса