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 :: Обращение к классу

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: при помощи статической функции Instance()
ole-martyno
Отправлено: 31 Июля, 2011 - 14:55:32
Post Id


Новичок


Покинул форум
Сообщений всего: 41
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)




Видел такое обращение к классу при помощи статической функции Instance():

PHP:
скопировать код в буфер обмена
  1.  
  2. class newClass
  3. {
  4. private static $instance;
  5.         public static function Instance()
  6.         {
  7.                 if (self::$instance == null)
  8.                         self::$instance = new M_Users();
  9.                        
  10.                 return self::$instance;
  11.         }
  12.  
  13. $class= newClass::Instance();
  14.  


какие преимущества это дает и в каких случаях стоит прибегать к подобному способу? Заранее спасибо за ответ
 
 Top
OrmaJever Модератор
Отправлено: 31 Июля, 2011 - 15:27:12
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




[url]http://ru.wikipedia.org/wiki/Одиночка_(шаблон_проектирования)[/url]
с таким вызовом всегда будет только 1 копия обьета.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
LIME
Отправлено: 31 Июля, 2011 - 15:41:02
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




ole-martyno еще тут надо было объявить приватным конструктор и клон чтоб уж до конца шаблон реализовать
если "на пальцах " то тогда нельзя будет создать объект кроме как используя метод инстанс
а в нем проверяется если уже был создан объект то он и возвращается если нет то создается
 
 Top
Roler
Отправлено: 31 Июля, 2011 - 16:26:57
Post Id



Посетитель


Покинул форум
Сообщений всего: 458
Дата рег-ции: Авг. 2008  
Откуда: Россия


Помог: 1 раз(а)




Паттерн "Singleton"
 
 Top
White
Отправлено: 31 Июля, 2011 - 17:09:52
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 830
Дата рег-ции: Июнь 2011  
Откуда: Днепропетровск


Помог: 28 раз(а)




синглтон часто используют для передачи данных между функциями и объектами разных классов (взамен global), так как объект при этом статичен, и может быть получен с помощью $class= newClass::Instance(); внутри любой функции. иногда также используют в качестве логгеров.
П.С. ИМХО, если все свойства и методы объекта этого класса предопределены самим классом, и динамически не добавляются, можно просто сделать приватный конструктор, таким образом запретив создание объектов вообще, а самому классу дать необходимые статичные свойства, и управлять ими в контексте класса с помощью self


-----
if(time()>1356048000) die();
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB