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

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

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



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

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




Цитата (sergeiss @ 25.10.2015 - 12:32)
Короче говоря, надо говорить не про "ООП в кубическом вакууме", а о конкретных ситуациях: вот тут они нужные, а там - не нужны.

Я этого и хочу! Если будут куски кода из реальных проектов, так вообще замечательно.
Цитата (sergeiss @ 25.10.2015 - 12:32)
По моему мнению, геттеры-сеттеры полезны в тех случаях, когда одновременно с изменением свойства надо выполнить действие.
Допустим, выставили свойство, после изменения которого надо сделать повторный коннект (к БД, к порту...). Без сеттера нужно будет помнить, что сначала выставляешь свойство, затем вызываешь функцию. А с сеттером это не нужно, т.к. ты заложишь это внутри сеттера.
Что касается геттера. Допустим, получаемая величина зависит от кучи других и может часто меняться. Тогда ты должен или при изменении тех других параметров менять этот параметр (наверняка где-то забудешь это сделать), или просто в геттере вычислить, что происходит в данный момент.

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


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

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

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



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 14962
Пользователь №: 4190
На форуме: 8 лет, 9 месяцев, 25 дней
Карма: 443




Цитата (chee @ 25.10.2015 - 12:49)
Если будут куски кода из реальных проектов, так вообще замечательно.

Кусков кода у меня нет. Я тебе просто на словах объясню.

Моё знакомство с ООП началось давно, с С++ в реализации от Borland. Там достаточно активно используются геттеры-сеттеры, при написании компонент. Но только там, где они реально нужны! Если же нужно просто выставить свойство, не делая при этом никаких действий, то никаких лишних телодвижений не делается.
И я так думаю, что там далеко не дураки работают. Для меня это весьма весомый аргумент.


--------------------
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

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

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



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

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




Цитата (sergeiss @ 25.10.2015 - 12:55)
И я так думаю, что там далеко не дураки работают. Для меня это весьма весомый аргумент.

Проблема в том что для меня это не аргумент smile.gif Вероятно что не дураки, но возможно тоже также смотрят на кого-то и повторяют, и говорят тоже самое smile.gif


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

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

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



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

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 3375
Пользователь №: 38635
На форуме: 2 года, 11 месяцев, 6 дней
Карма: 170




Вот он НЕ единственный и правильный, но достаточный аргумент, чтобы использовать гетеры и сеттеры.
Цитата (sergeiss @ 25.10.2015 - 10:32)
По моему мнению, геттеры-сеттеры полезны в тех случаях, когда одновременно с изменением свойства надо выполнить действие.


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


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

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



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 14962
Пользователь №: 4190
На форуме: 8 лет, 9 месяцев, 25 дней
Карма: 443




AllesKlar, давая этот ответ, я подразумевал, что геттеры-сеттеры хороши для некоторых случаев smile.gif То есть, для некоторых свойств их можно/нужно использовать, а для других не обязательно. Подчеркну, что в одном и том же объекте.
Я так понял начальный вопрос, что ТС сомневается в необходимости бездумного использования геттеров-сеттеров для всего подряд.


--------------------
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

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

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



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

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

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


Цитата (sergeiss @ 25.10.2015 - 18:46)
То есть, для некоторых свойств их можно/нужно использовать, а для других не обязательно. Подчеркну, что в одном и том же объекте.
Вот потому их и юзают всегда. Для однообразия интерфейсов. Чтобы всё было однотипно. Но это тараканы.


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

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

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

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

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



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

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 3375
Пользователь №: 38635
На форуме: 2 года, 11 месяцев, 6 дней
Карма: 170




sergeiss
Если проект небольшой, то да, можно поубирать.
А если там пара сотен файлов, в котором обращение к свойству объекта?
А потом бац... а давайте, если пол меняется на Женский, то обращение будет автоматически в объекте меняться с Господин на Госпожу...
И поехали по всему проекту if... else... шмалять smile.gif


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

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



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

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

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


Цитата (AllesKlar @ 25.10.2015 - 18:50)
Если проект небольшой, то да, можно поубирать.
А если там пара сотен файлов, в котором обращение к свойству объекта?
А потом бац... а давайте, если пол меняется на Женский, то обращение будет автоматически в объекте меняться с Господин на Госпожу...
И поехали по всему проекту if... else... шмалять

Как же вам, ООПэшникам, вбили в голову на генетическом уровне страх перед будущим. Когда от этого рождаются идеи плана инверсии зависимостей, это хорошо. А когда вот так бездумно, из-за животного страха, все через геттеры/сеттеры... А кто-нибудь проводил бенчи? Или да, о чем я. Tru ООПэшнику на ресурсы плевать. smile.gif

Так вот сеттеры работают в 10 (на порядок!) раз медленнее прямого обращения к свойствам. А в большинстве случаев, если соблюдать ваши же каноны, такой ситуации со сменой пола произойти не может в принципе. Ибо абстракции не должны зависеть от деталей.


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

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

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

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

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



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

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5489
Пользователь №: 35718
На форуме: 4 года, 13 дней
Карма: 167




Цитата (AllesKlar @ 25.10.2015 - 21:50)
Если проект небольшой, то да, можно поубирать.

то можно и попроцедурить блокнот не переломится
Цитата (twin @ 26.10.2015 - 05:42)
такой ситуации со сменой пола произойти не может в принципе

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


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

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



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

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 6065
Пользователь №: 18498
На форуме: 7 лет, 4 месяца, 5 дней
Карма: 256




Цитата (chee @ 25.10.2015 - 10:26)
Ну смотри у нас на работе в системе AR используется, геттеры и сеттеры там не используются как и магические методы __get или __set, то есть атрибуты сущностей как и всякого рода зависимости установлены в публичные свойства без сеттеров, и в принципе за 3 года работы, у меня не было претензий по поводу этой схемы.

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


--------------------
There never was a struggle in the soul of a good man that was not hard
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
kaww  
[x] Дата
Цитировать сообщение

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



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

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1755
Пользователь №: 20757
На форуме: 6 лет, 10 месяцев
Карма: 184




Michael, Вот, кстати, тоже интересно как chee отслеживает измененные св-ва в AR.
Цитата (twin @ 26.10.2015 - 02:42)
Так вот сеттеры работают в 10 (на порядок!) раз медленнее прямого обращения к свойствам.

Ну не в 10 а только в 2 (что тоже не очень круто, но как же иначе ;) ). А вот с магией где-то в 10 раз медленнее:
Свернутый текст

class TProp {
public $foo = 'Foo';
}
$t = new TProp();
$start = microtime(true);
for($i=0;$i<10000;++$i) {
$t->foo;
}
echo microtime(true) - $start, PHP_EOL;

class TMethod {
private $_foo = 'Foo';
public function getFoo() {
return $this->_foo;
}
}

$t = new TMethod();
$start = microtime(true);
for($i=0;$i<10000;++$i) {
$t->getFoo();
}
echo microtime(true) - $start, PHP_EOL;

class TMagic {
private $_foo = 'Foo';
public function getFoo() {
return $this->_foo;
}
public function __get($key) {
return $this->{'_' . $key};
}
}

$t = new TMagic();
$start = microtime(true);
for($i=0;$i<10000;++$i) {
$t->foo;
}
echo microtime(true) - $start, PHP_EOL;

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

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



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

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

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


Цитата (kaww @ 26.10.2015 - 04:14)
Ну не в 10 а только в 2

Фиг знает. Твой тест у меня это выдал:
Цитата
0.005000114440918
0.17200994491577
0.2160120010376
Тут даже не на порядок, тут вообще катастрофа. smile.gif Про порядок я за сеттеры говорил.


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

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

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

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

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



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

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1755
Пользователь №: 20757
На форуме: 6 лет, 10 месяцев
Карма: 184




twin, Какая версия php? Проверял тут http://sandbox.onlinephpfunctions.com/ , никак не выходит получить такую большую разницу.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
Дата
Цитировать сообщение

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



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

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

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


Цитата (kaww @ 26.10.2015 - 04:39)
twin, Какая версия php?

5.6.13

У меня так, сколько не крутил. И местами даже менял. biggrin.gif
Цитата
0.22601294517517
0.17200994491577
0.0069999694824219


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

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

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

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

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



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

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 3375
Пользователь №: 38635
На форуме: 2 года, 11 месяцев, 6 дней
Карма: 170




twin
По-поводу производительности согласен. Вот вообще согласен.
И оно понятно, что никакая обертка не будет даже рядом валяться с нативом.
Но так на то он и ассемблер, чтобы использовать его в узких местах, а не писать на нем интерфейс пользователя smile.gif
Должна же быть "Золотая середина"
- вот тут мы пишем геттеры / сеттеры, для облегчения себе жизни, жизни тех, кто будет проект поддерживать в будущем, уменьшении временных затрат на разработку, экономия средств заказчика.
- а вот тут ад программиста, а куда деваться, факториал штука ресурсоемкая.


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

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

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