/** * Основной метод, регистрирующий класс для закрытия * * @param Destructable $inst - Экземпляр класса, которй будет гарантированно закрыт в свою очередь * @param int $order - порядок закрытия */ public static function registerDestructable(Destructable $inst, $order) { /* * Класс получаем через get_called_class(), так как PsShotdownSdk может быть переопределён проектным */ $class = get_called_class(); /* * Проверяем, что нам передан валидный order */ $order = PsUtil::assertClassHasConstVithValue($class, null, PsCheck::int($order)); /* * Регистрируем shutdown */ if (is_null(self::$DESTRUCTS)) { PsUtil::assertClassHasDifferentConstValues($class); self::$DESTRUCTS = array(); register_shutdown_function(array(__CLASS__, '_doShotdown')); } /* * Проверим, что нет попытки повторной регистрации с тем-же order */ if (array_key_exists($order, self::$DESTRUCTS)) { raise_error("Попытка повторно зарегистрировать Destructable с порядком [{$order}] для класса " . get_class($inst)); } /* * Регистрируем класс на закрытие */ self::$DESTRUCTS[$order] = $inst; }
protected final function __construct() { $this->CLASS = get_called_class(); PsUtil::assertClassHasDifferentConstValues($this->CLASS, 'CODE_'); PsUtil::assertClassHasDifferentConstValues($this->CLASS, 'ACTION_'); $this->ACTIONS = PsUtil::getClassConsts($this->CLASS, 'ACTION_'); $this->LOGGER = PsLogger::inst($this->CLASS); $this->PROCESS_CODE = $this->getProcessCode(); check_condition(in_array($this->PROCESS_CODE, PsUtil::getClassConsts(__CLASS__, 'CODE_')), "Класс [{$this->CLASS}] использует незарегистрированный код аудита [{$this->PROCESS_CODE}]."); $this->SESSION = SESSION_AUDIT_ACTION . '-' . $this->CLASS . '-' . $this->PROCESS_CODE; }
protected function __construct() { //Убедимся в том, что константы класса не повторяются. Вообще более уместно использовать здесь enum. PsUtil::assertClassHasDifferentConstValues(__CLASS__, 'CODE_STATUS_'); parent::__construct(); }
protected function __construct() { PsUtil::assertClassHasDifferentConstValues(__CLASS__, 'TYPE_'); $this->LOGGER = PsLogger::inst(__CLASS__); $this->PROFILER = PsProfiler::inst(__CLASS__); $this->CACHE = new SimpleDataCache(); }
protected final function assertClassHasDifferentConstValues($class, $prefix = '') { PsUtil::assertClassHasDifferentConstValues($class, $prefix); }