Форумы портала PHP.SU » » Объектно-ориентированное программирование » Обращение к классу

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

1. ole-martyno - 31 Июля, 2011 - 14:55:32 - перейти к сообщению
Видел такое обращение к классу при помощи статической функции 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.  


какие преимущества это дает и в каких случаях стоит прибегать к подобному способу? Заранее спасибо за ответ
2. OrmaJever - 31 Июля, 2011 - 15:27:12 - перейти к сообщению
[url]http://ru.wikipedia.org/wiki/Одиночка_(шаблон_проектирования)[/url]
с таким вызовом всегда будет только 1 копия обьета.
3. LIME - 31 Июля, 2011 - 15:41:02 - перейти к сообщению
ole-martyno еще тут надо было объявить приватным конструктор и клон чтоб уж до конца шаблон реализовать
если "на пальцах " то тогда нельзя будет создать объект кроме как используя метод инстанс
а в нем проверяется если уже был создан объект то он и возвращается если нет то создается
4. Roler - 31 Июля, 2011 - 16:26:57 - перейти к сообщению
Паттерн "Singleton"
5. White - 31 Июля, 2011 - 17:09:52 - перейти к сообщению
синглтон часто используют для передачи данных между функциями и объектами разных классов (взамен global), так как объект при этом статичен, и может быть получен с помощью $class= newClass::Instance(); внутри любой функции. иногда также используют в качестве логгеров.
П.С. ИМХО, если все свойства и методы объекта этого класса предопределены самим классом, и динамически не добавляются, можно просто сделать приватный конструктор, таким образом запретив создание объектов вообще, а самому классу дать необходимые статичные свойства, и управлять ими в контексте класса с помощью self

 

Powered by ExBB FM 1.0 RC1