Задать вопрос

Какой вариант лучше для синглтона?

Какой вариант лучше для реализации метода getInstance в паттерне Singleton?
1.
public static function getInstance()
{
    return self::$instance ? : self::$instance = new static;
}

2.
public static function getInstance()
{
    if (!static::$instance) {
        static::$instance = new static;
    }

    return static::$instance;
}
  • Вопрос задан
  • 2338 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 5
ajaxtelamonid
@ajaxtelamonid
Laravel
Мое мнение - нельзя юзать тернарные операторы нигде, так как они ухудшают читабельность. Второй вариант.
Ответ написан
Комментировать
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
А вы я смотрю не угомонитесь никак.

С токи зрения конкретно реализации разницы нет, с точки зрения читаемости кода - второй вариант.

Просто прочитайте код:
1) вернуть инстанс если он есть иначе вернуть результат присванивания инстанс равен инстанцирование себя
2) если у нас нет инстанса, то мы создаем его, затем мы возвращаем инстанс.

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

И да, сингелтоны это хорошо, но не очень. И если в вашей системе есть необходимость в базовом классе для сингелтонов и каждый компонент построен на его основе - у вас проблемы с архитектурой.
Ответ написан
reffy
@reffy
Я молодец.
Если так важно чужое мнение, то второй вариант мне больше нравится.

А вообще -- это настолько незначительный вопрос, что я бы на такие вещи свою жизнь не тратил.
Ответ написан
Комментировать
@neolink
Без разницы, первый вариант короче, только я бы чуть изменил:

public static function getInstance()
{
    return static::$instance ?: static::$instance = new static();
}
Ответ написан
Тут конечно религиозные предпочтения.
public static function getInstance()
{
    return self::$instance ? : self::$instance = new static;
}

С точки зрения программиста такой код привлекательней и быстрей. Однако для командной работы лучше старый вариант. Иначе к вам придет злобный программист, который искал после вас баг и вынесет мозг.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы