Sobes.tech
Junior — Middle

Кадом қадамҳои иловагӣ барои иҷрои дурустии паттерни Singleton, ғайр аз манъ кардани конструктори умумӣ, зарур аст?

sobes.tech AI

Ҷавоб аз AI

Барои татбиқи дурусти намунаи Singleton дар PHP, ғайр аз манъ кардани конструктори умумӣ, зарур аст:

  1. Конструкторро private ё protected кардан, то аз эҷоди намунаҳо аз берун пешгирӣ шавад.
  2. Манъ кардани клонидани объект тавассути иҷрои методи __clone ва гардондани он private ё партофтани истисно.
  3. Манъ кардани десериализатсия тавассути иҷрои метода __wakeup ва гардондани он private ё партофтани истисно.
  4. Эҷод кардани як методи статикӣ (масалан, getInstance) ки танҳо як намунаи синфро эҷод ва баргардонад.

Масалан:

class Singleton {
    private static $instance = null;

    private function __construct() {
        // конструктори хусусӣ
    }

    private function __clone() {
        // манъ кардани клонидан
        throw new \Exception("Cloning is not allowed.");
    }

    private function __wakeup() {
        // манъ кардани десериализатсия
        throw new \Exception("Unserialization is not allowed.");
    }

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

Ин ба таъмини он кӯмак мекунад, ки танҳо як намунаи синф эҷод шавад ва он наметавонад клонида ё аз ҳолати сериалӣ барқарор карда шавад.