Честный вызов компонента

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Аватара пользователя
Driver86
Сообщения: 141
Зарегистрирован: 2015.04.13, 14:17

Честный вызов компонента

Сообщение Driver86 »

Обращение к секьюрити:

Yii::$app->getSecurity()
Yii::$app->security

Обращение к сессии:

Yii::$app->getSession()
Yii::$app->session
Найдите 146 отличий
В чём разница?
Спишь?
astronin
Сообщения: 606
Зарегистрирован: 2012.01.30, 17:46

Re: Честный вызов компонента

Сообщение astronin »

?
Аватара пользователя
Driver86
Сообщения: 141
Зарегистрирован: 2015.04.13, 14:17

Re: Честный вызов компонента

Сообщение Driver86 »

astronin, в разных источниках, официальном доке и yii2-app-advanced-master к, например, security обращаются по разному:

Yii::$app->getSecurity()->generatePasswordHash($password);
Yii::$app->security->generatePasswordHash($password);

Вот я и спрашиваю, в чём разница
Спишь?
Аватара пользователя
SiZE
Сообщения: 2813
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Честный вызов компонента

Сообщение SiZE »

Ferro7 писал(а):в чём разница
Без разницы.

Парадигма ООП подразумевает обращение к свойствам объекта только через методы, так называется геттеры и сеттеры. Для удобства в PHP есть магический метод __get, который позволяет обращаться к свойству по имени, но при этом не нарушая ООПэшности, т.е. подменяя имя свойства на имя метода getЧтототам.
mickgeek
Сообщения: 957
Зарегистрирован: 2014.05.31, 20:50
Откуда: Санкт-Петербург
Контактная информация:

Re: Честный вызов компонента

Сообщение mickgeek »

Разница в читабельности.

Не так давно Дмитрий Елисеев провёл вебинар по геттерам и сеттерам. Хоть я и не смотрел, но уверен, что материал является одним из самых подробных в рунете на данную тему.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Честный вызов компонента

Сообщение zelenin »

юзайте геттеры - это правильнее, очевиднее и быстрее.
Onotole
Сообщения: 1808
Зарегистрирован: 2012.12.24, 12:49

Re: Честный вызов компонента

Сообщение Onotole »

zelenin писал(а):юзайте геттеры - это правильнее, очевиднее и быстрее.
Не быстрее, это точно.
Обратиться к $class->getProperty()
Или обратиться к $class->property, который вызовет __get(), который вызовет, возможно, родительский __get(), который вызовет getProperty()
Думаю в первом случае будет немного побыстрее
Аватара пользователя
vitalik1183
Сообщения: 1675
Зарегистрирован: 2014.07.01, 08:42

Re: Честный вызов компонента

Сообщение vitalik1183 »

Вы это вряд ли ощутите.
Последний раз редактировалось vitalik1183 2015.06.11, 12:25, всего редактировалось 1 раз.
Yii2!
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Честный вызов компонента

Сообщение zelenin »

Onotole писал(а):
zelenin писал(а):юзайте геттеры - это правильнее, очевиднее и быстрее.
Не быстрее, это точно.
Обратиться к $class->getProperty()
Или обратиться к $class->property, который вызовет __get(), который вызовет, возможно, родительский __get(), который вызовет getProperty()
Думаю в первом случае будет немного побыстрее
Геттер - метод для доступа к атрибуту, обычно начинающийся с get. Судя по всему вы перепутали понятия.
Onotole
Сообщения: 1808
Зарегистрирован: 2012.12.24, 12:49

Re: Честный вызов компонента

Сообщение Onotole »

zelenin писал(а):
Onotole писал(а):
zelenin писал(а):юзайте геттеры - это правильнее, очевиднее и быстрее.
Не быстрее, это точно.
Обратиться к $class->getProperty()
Или обратиться к $class->property, который вызовет __get(), который вызовет, возможно, родительский __get(), который вызовет getProperty()
Думаю в первом случае будет немного побыстрее
Геттер - метод для доступа к атрибуту, обычно начинающийся с get. Судя по всему вы перепутали понятия.
Эм.. Что я перепутал?
Я знаю, что такое геттер и об этом и пишу. По сути геттер это обычный метод, который в Yii вызывается магическим __get()
Значение этого петода можно получить двумя путями: обратиться к этому методу напрямую, либо же вызвать несуществующее свойство, при вызове которого сработает __get() который так же вызовет тот же самый метод.
Я к тому, что Yii::$app->session это то же самое. что и Yii::$app->getSession()
Только во втором случае этот метод вызывается напрямую, а во втором через __get()
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Честный вызов компонента

Сообщение zelenin »

Onotole писал(а):
zelenin писал(а):
Onotole писал(а): Не быстрее, это точно.
Обратиться к $class->getProperty()
Или обратиться к $class->property, который вызовет __get(), который вызовет, возможно, родительский __get(), который вызовет getProperty()
Думаю в первом случае будет немного побыстрее
Геттер - метод для доступа к атрибуту, обычно начинающийся с get. Судя по всему вы перепутали понятия.
Эм.. Что я перепутал?
Я знаю, что такое геттер и об этом и пишу. По сути геттер это обычный метод, который в Yii вызывается магическим __get()
Значение этого петода можно получить двумя путями: обратиться к этому методу напрямую, либо же вызвать несуществующее свойство, при вызове которого сработает __get() который так же вызовет тот же самый метод.
Я к тому, что Yii::$app->session это то же самое. что и Yii::$app->getSession()
Только во втором случае этот метод вызывается напрямую, а во втором через __get()
геттер - это метод, начинающийся с get. Способ доступа к нему не важен. Я написал, что нужно юзать геттеры, противопоставляя использованию свойств компонента (именно об этом речь идет в этом топике). Вы написали что это неправда и описали опять же то, что я написал, что геттеры быстрее. Где-то вы запутались.
Аватара пользователя
vitalik1183
Сообщения: 1675
Зарегистрирован: 2014.07.01, 08:42

Re: Честный вызов компонента

Сообщение vitalik1183 »

Вот не похуй как обращаться? Пусть обращается через getMethod() - ваще сиренево.
Yii2!
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Честный вызов компонента

Сообщение zelenin »

vitalik1183 писал(а):Вот не похуй как обращаться? Пусть обращается через getMethod() - ваще сиренево.
даже не знаю как прокомментировать. Тут не автору поста советы даются, а в том числе тебе.
Аватара пользователя
vitalik1183
Сообщения: 1675
Зарегистрирован: 2014.07.01, 08:42

Re: Честный вызов компонента

Сообщение vitalik1183 »

zelenin писал(а):
vitalik1183 писал(а):Вот не похуй как обращаться? Пусть обращается через getMethod() - ваще сиренево.
даже не знаю как прокомментировать. Тут не автору поста советы даются, а в том числе тебе.
я обращаюсь $this->comments
Не понял причем тут я?
Yii2!
Onotole
Сообщения: 1808
Зарегистрирован: 2012.12.24, 12:49

Re: Честный вызов компонента

Сообщение Onotole »

zelenin писал(а):геттер - это метод, начинающийся с get. Способ доступа к нему не важен. Я написал, что нужно юзать геттеры, противопоставляя использованию свойств компонента (именно об этом речь идет в этом топике). Вы написали что это неправда и описали опять же то, что я написал, что геттеры быстрее. Где-то вы запутались.
Разве я сказал, что нужно обращаться именно так? Я просто сказал, что разница во времени. Я сам всегда стараюсь использовать сами геттеры, нежели обращаться к ним через свойства
kukuruku
Сообщения: 1318
Зарегистрирован: 2011.02.14, 11:36

Re: Честный вызов компонента

Сообщение kukuruku »

Onotole писал(а):
zelenin писал(а):геттер - это метод, начинающийся с get. Способ доступа к нему не важен. Я написал, что нужно юзать геттеры, противопоставляя использованию свойств компонента (именно об этом речь идет в этом топике). Вы написали что это неправда и описали опять же то, что я написал, что геттеры быстрее. Где-то вы запутались.
Разве я сказал, что нужно обращаться именно так? Я просто сказал, что разница во времени. Я сам всегда стараюсь использовать сами геттеры, нежели обращаться к ним через свойства
есть замеры по производительности?
mickgeek
Сообщения: 957
Зарегистрирован: 2014.05.31, 20:50
Откуда: Санкт-Петербург
Контактная информация:

Re: Честный вызов компонента

Сообщение mickgeek »

Я замерял когда-то, на Yii 2 с длинными циклами. Свойство vs Геттер - средние результаты были фактически одинаковыми.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Честный вызов компонента

Сообщение zelenin »

Onotole писал(а):
zelenin писал(а):геттер - это метод, начинающийся с get. Способ доступа к нему не важен. Я написал, что нужно юзать геттеры, противопоставляя использованию свойств компонента (именно об этом речь идет в этом топике). Вы написали что это неправда и описали опять же то, что я написал, что геттеры быстрее. Где-то вы запутались.
Разве я сказал, что нужно обращаться именно так? Я просто сказал, что разница во времени. Я сам всегда стараюсь использовать сами геттеры, нежели обращаться к ним через свойства
ну я так и написал, что геттер быстрее, а ты говоришь что геттер не быстрее, потому что.... и описываешь, что геттер быстрее.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Честный вызов компонента

Сообщение zelenin »

kukuruku писал(а):
Onotole писал(а):
zelenin писал(а):геттер - это метод, начинающийся с get. Способ доступа к нему не важен. Я написал, что нужно юзать геттеры, противопоставляя использованию свойств компонента (именно об этом речь идет в этом топике). Вы написали что это неправда и описали опять же то, что я написал, что геттеры быстрее. Где-то вы запутались.
Разве я сказал, что нужно обращаться именно так? Я просто сказал, что разница во времени. Я сам всегда стараюсь использовать сами геттеры, нежели обращаться к ним через свойства
есть замеры по производительности?
а нужны они тут? скорость очевидна. интересна может быть только относительная разница.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Честный вызов компонента

Сообщение zelenin »

mickgeek писал(а):Я замерял когда-то, на Yii 2 с длинными циклами. Свойство vs Геттер - средние результаты были фактически одинаковыми.
первое же обращение закэшируется и будет вызываться напрямую. Вполне возможно, что это экономия на спичках, но важен еще фактор очевидности в программировании - неизвестно то ли ты свойство вызвал, то ли геттер, то ли метод из поведения то ли еще что-то магическое, а геттер будет однозначен (и дружелюбнее для IDE).
Ответить