class Class_Name {
private static $init;
public static function instance() {
if ( is_null( self::$init ) ) {
self::$init = new self();
}
return self::$init;
}
private __construct() {
}
}
Class_Name::instance();
То есть здесь есть проверка на то, есть ли уже экземпляр класса. Зачем эта проверка если я создаю 1 экземпляр используя new Class_Name();
В каких случаях может создаваться несколько объектов или эта можно не делать эту проверку?
Иван Шумов, да в "хуяк–хуяк и в продакшен" тоже нет ничего плохого, когда оно работает.
плохо становится при долгосрочной поддержке и покрытием тестами.
тем более что уже давно научились как обходиться без синглтона.
синглтон это такой же костыль, как include_once.
помогает спагетти-говнокоду не упасть, запутавшись в спадающих штанах.
Если программист четко знает что и зачем у него делает каждый блок кода, то ему не нужен ни синглтон, ни _once
А когда винегрет, в котором концов не найти - тогда конечно, обвешанные сертификатами архитекты типа Иван Шумов без костылей обойтись не могут.
FanatPHP, ну, лично мне в принципе не важно что там с кодом если это не мешает двигаться вперёд и не заставляет буксовать в рефакторинге. Моя задача чтобы вот такие вопросы оставались на уровне холиваров и не влияли на продукт)
Иван Шумов, домашняя страничка с фотографиями котиков и не будет буксовать.
А вот когда тебе придется разносить запись и чтение по разным базам, а у тебя кругом один синглтон - вот тогда и приходи, поговорим.
FanatPHP, я строю архитектуру в подавляющем случае Immutable. Поэтому рефакторинг производится только по праздникам, в крайних случаях. Рефакторинг не нужен там где нет изменения кодовой базы)