ФорумПрограммированиеPHP для идиотов → Реализация Синглтона

Реализация Синглтона

  • meta

    Сообщения: 4 Репутация: N Группа: Кто попало

    Spritz 11 октября 2011 г. 18:37

    Здравствуйте,

    Хотел поинтересоваться, на много ли такая реализация синглтона будет медленнее стандартной?

    Стандартная реализация класса-одиночки (например логгера):


    <?php
    class Log
    {
    private static $instance = null;

    private function __construct(){}
    private function __clone(){}

    public static function instance()
    {
    if(self::$instance == null)
    {
    self::$instance = new self;
    }

    return self::$instance;
    }

    public function write()
    {
    }

    }
    ?>



    Я предположил, что копипаст части кода во все классы-одиночки нецелесообрзен, поэтому попробовал сделать так:
    1. У нас есть класс, оперирующий классами-одиночками.
    2. У нас есть сами классы.

    Класс-оператор:

    <?php
    class Single
    {
    private static $instance = array();

    private function __construct(){}
    private function __clone(){}

    public static function instance($type)
    {
    if(empty(self::$instance[$type]))
    {
    self::$instance[$type] = new $type;
    }

    return self::$instance[$type];
    }
    }
    ?>


    И например класс логгера:

    class Log
    {
    public function write()
    {
    }
    }


    Вызов происходит через Single::instance('Log')->write();
    вместо стандартного Log::instance()->write();

    Спасибо за внимание :)
  • Kikky

    Сообщения: 201 Репутация: N Группа: Кто попало

    Spritz 11 октября 2011 г. 18:43, спустя 5 минут 37 секунд

    Сколько же у тебя синглтонов в проекте? = )
  • meta

    Сообщения: 4 Репутация: N Группа: Кто попало

    Spritz 11 октября 2011 г. 18:50, спустя 6 минут 49 секунд

    Штук 5-10 наберется.
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 11 октября 2011 г. 19:11, спустя 20 минут 52 секунды

    тоже такой фигней когда-то страдал. Реализовывал через get_called_class().

    Но синглтоны - это зло, сейчас у нас нет ни одного синглтона
    Спустя 17 сек.
    IoC-контейнер - наше все
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 11 октября 2011 г. 19:18, спустя 6 минут 55 секунд

    Абырвалг, опять словами модными кидаешься xDDDD
    Сапожник без сапог
  • meta

    Сообщения: 4 Репутация: N Группа: Кто попало

    Spritz 11 октября 2011 г. 19:52, спустя 34 минуты 42 секунды

    Абырвалг, Насколько я знаю, IoC не подходит для работы с библиотеками. А мне таки это и нужно.
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 11 октября 2011 г. 20:01, спустя 8 минут 54 секунды

    meta, обоснуй почему не подходит, не понятно…
  • meta

    Сообщения: 4 Репутация: N Группа: Кто попало

    Spritz 11 октября 2011 г. 20:11, спустя 9 минут 35 секунд

    kostyl, Можно просто реализовать явную передачу нужных параметров в библиотеки. Кстати, мы уходим от сабжа :)
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 11 октября 2011 г. 20:26, спустя 15 минут 1 секунду

    meta, нет, мы как раз идем туда куда надо… Покажи пример как IoC не подходит для какой нибудь библиотеки и как там подходит твоя фабрика синглтонов?
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 11 октября 2011 г. 21:02, спустя 35 минут 59 секунд

    ну и чё, в жопе синглтон или нет?
  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz 11 октября 2011 г. 22:10, спустя 1 час 8 минут 8 секунд

    в жопе, и это говорю вам я, тот, кто когдато написал какуюто уебанскую мини статью на пыху, и в которой это поднималось =)
  • qpayct

    Сообщения: 54 Репутация: N Группа: Адекваты

    Spritz 12 октября 2011 г. 13:21, спустя 15 часов 10 минут 50 секунд

    дорога ложка к обеду. так и с сингтоном. иногда оправдывает себя, а иногда нет. смотря что конкретно нужно.
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 13 октября 2011 г. 12:39, спустя 23 часа 17 минут 51 секунду

    NRG, на всякий случай напишу, что я спрашивал именно ТС…
  • Flare

    Сообщения: 284 Репутация: N Группа: Кто попало

    Spritz 13 октября 2011 г. 15:28, спустя 2 часа 49 минут 1 секунду

    Что-то подобное я уже видел тут - http://amdy.su/mix-singleton-and-registry/
  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz 14 октября 2011 г. 17:49, спустя 1 день 2 часа 21 минуту

    meta то, что ты сделал называется рееестром. В твоем случае вообще не стоит думать о скорости, ты ее потеряешь на другом. Используй синглтон и прочие штуки до тех пор, пока не поймешь, что это плохо. Лучше конечно сразу понять, но ты будешь упираться, так как тебе лень совершенствоваться.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!