Вы не зашли.
Главная » 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);} }?>
Возможно ли усовершенствовать такой механизм?
Натан ротшильд :
Кто владеет информацией, тот владеет миром
#2. Gemorroj Off (107)
Administrator
2010.11.25 11:11
Код:
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
Натан ротшильд :
Кто владеет информацией, тот владеет миром
#4. Gemorroj Off (107)
Administrator
2010.11.25 12:12
да, я не прав. тут нужны магические сеттеры/геттеры.
Код:
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
Ну а как насчет наследования? Копипастить содержимое при каждом наследовании не хочется
Натан ротшильд :
Кто владеет информацией, тот владеет миром
#6. Gemorroj Off (107)
Administrator
2010.11.25 15:03
так тебе и не нужно писать вызовы родительского класса. ребенок же уже унаследовал (extends) свойства и методы родителя.
#7. Morgan Off (10)
Участник
2010.11.25 16:04
Производных класс обращается к базовому, а тот получаете данные из глобальной области. Поэтому я явно вызываю методы с указанной областью видимости
Натан ротшильд :
Кто владеет информацией, тот владеет миром
#8. Fuelen Off (5)
Участник
2010.11.26 13:01
магический метод __isset(). Вообще, в регистри все методы магические должны быть) удобно
на хую вас вертів
#9. Morgan Off (10)
Участник
2010.11.26 23:11
Вроде бы магические методы статическими быть не могут.
Натан ротшильд :
Кто владеет информацией, тот владеет миром
#10. Morgan Off (10)
Участник
2010.11.29 00:12
Идей нет?
Натан ротшильд :
Кто владеет информацией, тот владеет миром
Страниц: 1 2 Все
Главная
WEB
PunBB Mod v0.6.2
0.012 s