#1 2010.11.25 11:18

Morgan
Участник
Зарегистрирован: 2009.03.31
Сообщений: 333
Карма: 10
Профиль Веб-сайт

Области хранения данных в Registry

Базовый класс

Код:

1
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]; } }?>

Производные классы, для хранения данных в других областях видимости строятся по подобию

Код:

1
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 2010.11.25 11:51

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6594
Карма: 107
Профиль Веб-сайт

Re: Области хранения данных в Registry

Код:

1
span style="color: #0000BB"><?phpRegistry::set('test', null);var_dump(Registry::get('test'));

используй в get array_key_exists
полчему нельзя назвать метод isset?
и, я бы еще настоятельно советовал приватные и защщенные методы и свойства назвать с символа подчеркивания. очень улучшает читабельность.

Неактивен

#3 2010.11.25 12:01

Morgan
Участник
Зарегистрирован: 2009.03.31
Сообщений: 333
Карма: 10
Профиль Веб-сайт

Re: Области хранения данных в Registry

Код:

1
2
3
4
class test
{
public function isset(){}
}

=> Parse error: syntax error, unexpected T_ISSET, expecting T_STRING


Натан ротшильд :
Кто владеет информацией, тот владеет миром

Неактивен

#4 2010.11.25 12:23

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6594
Карма: 107
Профиль Веб-сайт

Re: Области хранения данных в Registry

да, я не прав. тут нужны магические сеттеры/геттеры.

Код:

1
span style="color: #0000BB"><?phpclass test{ static public $v = true; public function __get($x) { return isset($x); }}var_dump(isset(test::$v));

Неактивен

#5 2010.11.25 15:02

Morgan
Участник
Зарегистрирован: 2009.03.31
Сообщений: 333
Карма: 10
Профиль Веб-сайт

Re: Области хранения данных в Registry

Ну а как насчет наследования? Копипастить содержимое при каждом наследовании не хочется


Натан ротшильд :
Кто владеет информацией, тот владеет миром

Неактивен

#6 2010.11.25 15:22

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6594
Карма: 107
Профиль Веб-сайт

Re: Области хранения данных в Registry

так тебе и не нужно писать вызовы родительского класса. ребенок же уже унаследовал (extends) свойства и методы родителя.

Неактивен

#7 2010.11.25 16:04

Morgan
Участник
Зарегистрирован: 2009.03.31
Сообщений: 333
Карма: 10
Профиль Веб-сайт

Re: Области хранения данных в Registry

Производных класс обращается к базовому, а тот получаете данные из глобальной области. Поэтому я явно вызываю методы с указанной областью видимости


Натан ротшильд :
Кто владеет информацией, тот владеет миром

Неактивен

#8 2010.11.26 13:54

Fuelen
Участник
Зарегистрирован: 2009.06.22
Сообщений: 229
Карма: 5
Профиль

Re: Области хранения данных в Registry

магический метод __isset(). Вообще, в регистри все методы магические должны быть) удобно


на хую вас вертів

Неактивен

#9 2010.11.26 23:54

Morgan
Участник
Зарегистрирован: 2009.03.31
Сообщений: 333
Карма: 10
Профиль Веб-сайт

Re: Области хранения данных в Registry

Вроде бы магические методы статическими быть не могут.


Натан ротшильд :
Кто владеет информацией, тот владеет миром

Неактивен

#10 2010.11.29 00:41

Morgan
Участник
Зарегистрирован: 2009.03.31
Сообщений: 333
Карма: 10
Профиль Веб-сайт

Re: Области хранения данных в Registry

Идей нет?


Натан ротшильд :
Кто владеет информацией, тот владеет миром

Неактивен

#11 2010.11.29 12:02

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6594
Карма: 107
Профиль Веб-сайт

Re: Области хранения данных в Registry

я псто N 7 не понял. зачем вызывать родительские методы, если они уже у нас отнаследованы?
область  видимости передавай параметром

Неактивен

Дополнительно

forum.wapinet.ru

PunBB Mod v0.6.2
0.020 s