Esempio n. 1
0
 /**
  * Основной метод, регистрирующий класс для закрытия
  * 
  * @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;
 }
Esempio n. 2
0
 /**
  * Метод возвращает склонение слова в заданном падеже
  * 
  * @param string $word - слово
  * @param string $type - требуемый падеж
  * @return type
  */
 public function getInflection($word, $type = self::TYPE_ORIG)
 {
     if ($type == self::TYPE_ORIG) {
         return $word;
         //Сразу вернём оригинальное значение
     }
     PsUtil::assertClassHasConstVithValue(__CLASS__, 'TYPE_', $type);
     return array_get_value($type, $this->getInflections($word));
 }
Esempio n. 3
0
 public function __construct($message, $code, $query, array $params, $previous = null)
 {
     $this->query = $query;
     $this->params = $params;
     $code = PsUtil::assertClassHasConstVithValue(__CLASS__, 'ERROR_', $code);
     if ($code == self::ERROR_NOT_CLASSIFIED) {
         /*
          * Если ошибка не классифицирована, то мы попробуем её классифицировать
          */
         if (starts_with($message, 'Duplicate entry ')) {
             $code = self::ERROR_DUPLICATE_ENTRY;
         }
     }
     $message = $message ? $message : 'Unknown db error';
     $message = "{$message}. Query: [{$query}]" . ($params ? ', Params: ' . array_to_string($params) . '.' : '');
     parent::__construct($message, $code, $previous);
 }
Esempio n. 4
0
 /**
  * Метод меняет состояние, проверяя корректность текущего
  * 
  * @param int $old - старое состояние
  * @param int $new - новое состояние
  */
 private function changeState($old, $new)
 {
     $this->checkState($old);
     $this->STATE = PsUtil::assertClassHasConstVithValue(__CLASS__, 'STATE_', $new);
 }
Esempio n. 5
0
 /**
  * @covers PsUtil::assertClassHasConstVithValue
  */
 public function testAssertClassHasConstVithValue()
 {
     $this->assertEquals('A', PsUtil::assertClassHasConstVithValue(new ClassA(), null, 'A'));
     $this->assertEquals('B', PsUtil::assertClassHasConstVithValue(ClassA::get__CLASS__(), 'CONST_', 'B'));
     $this->assertEquals('B', PsUtil::assertClassHasConstVithValue(ClassA::get__FILE__(), 'CONST_B', 'B'));
     try {
         //Константы не существует
         PsUtil::assertClassHasConstVithValue(new ClassA(), 'CONST_A', 'B');
         $this->fail('Exception is expected');
     } catch (PException $ex) {
         //OK
     }
     try {
         //Две константы с одинаковым значением
         PsUtil::assertClassHasConstVithValue(new ClassA(), 'CONST_', 'C');
         $this->fail('Exception is expected');
     } catch (PException $ex) {
         //OK
     }
 }