Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Вопрос по созданию объектов
Покинул форум
Сообщений всего: 41
Дата рег-ции: Окт. 2010
Помог: 0 раз(а)
Я использую с недавнего времени в своем проекте фреймворк Kohana, изучал его по видео и прочим материалам. Так вот, заметил такую стилистику использования метода factory, когда объект каждый раз создается заново:
Я не очень понимаю преимущества первого способа, хотя у меня есть предположения, что:
1. Красота кода
2. Экономия оперативной памяти
Но что если необходимо вызывать метод factory 10-20 раз? Стоит ли в этом случае использовать 1 метод? Или разница в скорости будет минимальна?
DeepVarvar
Отправлено: 27 Февраля, 2013 - 10:35:18
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
ole-martyno пишет:
когда объект каждый раз создается заново
ole-martyno пишет:
Красота кода
ole-martyno пишет:
Экономия оперативной памяти
Жара. Вся фишка в return $this; (Добавление)
И это, зря начал с фреймворков. Надо было начинать с чистого, тогда бы не было таких вопросов.
Так например все "перцы" юзают фреймворк "жуйквери" в душе не умея чистый жаваскрипт.
Беда...
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
ole-martyno пишет:
когда объект каждый раз создается заново:
объект не создается много раз. он создается один раз, при первом обращении (в пределах всего приложения), а потом только возвращается фабричным методом.
(Добавление)
упс, DeepVarvar уже показал цепочки ..
----- Чем больше узнаю, тем больше я не знаю.
ole-martyno
Отправлено: 27 Февраля, 2013 - 11:03:40
Новичок
Покинул форум
Сообщений всего: 41
Дата рег-ции: Окт. 2010
Помог: 0 раз(а)
Цитата:
объект не создается много раз. он создается один раз, при первом обращении (в пределах всего приложения), а потом только возвращается фабричным методом.
Я думал, что это только в синглтоне объект "запоминается". Непонятно...
Цитата:
ps это вы еще какой нибудь орм не видели
видел, даже использовал. Я не понимаю причем здесь цепочки. Мой вопрос про быстродействие и какой способ(в моем первом сообщении) лучше.
Для справки, вот как выглядит метод factory в кохановском классе:
Покинул форум
Сообщений всего: 351
Дата рег-ции: Нояб. 2010
Помог: 13 раз(а)
Он гонит
Если в методе factory лежит return new $class;, то будет каждый раз создаваться экземпляр объекта. В данном случае - это не айс. Но бываю моменты, когда нужно так сделать, это наподобие клонирования
DeepVarvar
Отправлено: 27 Февраля, 2013 - 13:38:07
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
ams, ты тоже ТС интересует чо такое текучий интерфейс
Автору материалов конечно если нечего было сказать по этому поводу, то и материалы бы не делал.
ole-martyno пишет:
Я спрашиваю, почему автор материалов, по которым я изучал фреймворк предпочитает
такой способ:
а не такой:
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
сорри
ole-martyno пишет:
Я думал, что это только в синглтоне объект "запоминается". Непонятно...
все верно. но синглтон это частный случай фабрики. я просто не знаю как там кохана устроена. Если каждый раз создается новый экземпляр, то соглашусь с вами в непонимании автора уроков (может он тоже не знает как устроены фабричные методы в кохане ).
В данном конкретном приведенном вами примере, разумнее сохранять полученный объект в переменную.
----- Чем больше узнаю, тем больше я не знаю.
esterio
Отправлено: 27 Февраля, 2013 - 15:58:45
Активный участник
Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012 Откуда: Украина, Львов
* Model base class. All models should extend this class.
*
*@package Kohana
*@category Models
*@author Kohana Team
*@copyright (c)2008-2012 Kohana Team
*@license http://kohanaframework.org/license
*/
abstract class Kohana_Model {
/**
* Create a new model instance.
*
* $model = Model::factory($name);
*
* @param string $name model name
* @return Model
*/
public static function factory($name)
{
// Add the model prefix
$class='Model_'.$name;
returnnew$class;
}
}// End Model
Значит вам нужно искать новые уроки, а еще лучше читать документацию
DeepVarvar
Отправлено: 27 Февраля, 2013 - 16:19:16
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
DelphinPRO пишет:
В данном конкретном приведенном вами примере, разумнее сохранять полученный объект в переменную.
Нифига - только если она будет нужна далее. А так у объекта текучий интерфейс, и для одноразового использования того, что вернула фабрика, переменная эта не нужна:
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.