Exemple #1
0
 /**
  * Основной метод получения экземпляра енума
  */
 protected static function inst()
 {
     $trace = debug_backtrace(0, 2)[1];
     //Из стека получим информацию о классе, функции и аргументах вызова
     $class = $trace['class'];
     //$trace = PsUtil::getClassFirstCall($class);
     $name = $trace['function'];
     $unique = "{$class}::{$name}";
     //Проверим в кеше
     if (array_key_exists($unique, self::$_INSTS_)) {
         return self::$_INSTS_[$unique];
     }
     //Устанавливаем признак создания экземпляра
     self::$_NOW_CREATE_ = $unique;
     //Аргументы вызова
     $args = func_get_args();
     //Создаём экземпляр
     $inst = new $class($unique, $name);
     //Сбросим признак
     self::$_NOW_CREATE_ = null;
     //Сохраняем его в кеш
     self::$_INSTS_[$unique] = $inst;
     //Вызовем функцию init для наполнения полей класса
     call_user_func_array(array($inst, 'init'), $args);
     //Возвращаем экземпляр
     return $inst;
 }
Exemple #2
0
 /**
  * Возвращает свойство по названию
  * 
  * @return PsTableColumnProps
  */
 public static function valueOf($name)
 {
     //TODO - вынести в PsEnum
     return $name instanceof PsTableColumnProps ? $name : parent::valueOf($name);
 }