Вы не зашли.
Главная »
PHP » Области хранения данных в Registry
#1.
Morgan
Off
(10)
Участник
2010.11.25 11:11
Базовый класс
Код:
span style="color: #0000BB"><?php class Registry { /** * Хранилище */ static private $data = array(); /** * Сохранение значения */ static public function set($name, $value, $space = 'global') { self::$data[$space][$name] = $value; return $value; } /** * Получение значения */ static public function get($name, $space = 'global') { return isset(self::$data[$space][$name]) ? self::$data[$space][$name] : false; } /** * Очищение всех данных */ static public function clear($space = 'global') { self::$data[$space] = array(); return true; } /** * Проверка на существование * * @since 19.11.2010 * @fail Назвать метод isset() невозможно */ static public function is_set($name, $space = 'global') { return isset(self::$data[$space][$name]); } /** * Дамп данных * * @since 19.11.2010 */ static public function dump($space = 'global') { return self::$data[$space]; } }?> |
Производные классы, для хранения данных в других областях видимости строятся по подобию
Код:
span style="color: #0000BB"><?php class MF_Registry extends Registry { static private $space = 'MF'; static public function set($var_name, $var_set){return parent::set($var_name, $var_set, self::$space);} static public function get($var_name){return parent::get($var_name, self::$space);} static public function is_set($var_name){return parent::is_set($var_name, self::$space);} static public function clear(){return parent::clear(self::$space);} static public function dump(){return parent::dump(self::$space);} }?> |
Возможно ли усовершенствовать такой механизм?
Натан ротшильд :
Кто владеет информацией, тот владеет миром
Код:
span style="color: #0000BB"><?phpRegistry::set('test', null);var_dump(Registry::get('test')); |
используй в get array_key_exists
полчему нельзя назвать метод isset?
и, я бы еще настоятельно советовал приватные и защщенные методы и свойства назвать с символа подчеркивания. очень улучшает читабельность.
#3.
Morgan
Off
(10)
Участник
2010.11.25 12:12
Код:
class test |
{ |
public function isset(){} |
} |
=> Parse error: syntax error, unexpected T_ISSET, expecting T_STRING
Натан ротшильд :
Кто владеет информацией, тот владеет миром
да, я не прав. тут нужны магические сеттеры/геттеры.
Код:
span style="color: #0000BB"><?phpclass test{ static public $v = true; public function __get($x) { return isset($x); }}var_dump(isset(test::$v)); |
#5.
Morgan
Off
(10)
Участник
2010.11.25 15:03
Ну а как насчет наследования? Копипастить содержимое при каждом наследовании не хочется
Натан ротшильд :
Кто владеет информацией, тот владеет миром
так тебе и не нужно писать вызовы родительского класса. ребенок же уже унаследовал (extends) свойства и методы родителя.
#7.
Morgan
Off
(10)
Участник
2010.11.25 16:04
Производных класс обращается к базовому, а тот получаете данные из глобальной области. Поэтому я явно вызываю методы с указанной областью видимости
Натан ротшильд :
Кто владеет информацией, тот владеет миром
магический метод __isset(). Вообще, в регистри все методы магические должны быть) удобно
на хую вас вертів
#9.
Morgan
Off
(10)
Участник
2010.11.26 23:11
Вроде бы магические методы статическими быть не могут.
Натан ротшильд :
Кто владеет информацией, тот владеет миром
Идей нет?
Натан ротшильд :
Кто владеет информацией, тот владеет миром