Голосование
Какую CMS Вы предпочитаете
AtomX
Fapos CMS
Drunya CMS
Топ новостей
- Генератор аватарок в стиле пиксель-арт
- Скачать Fapos CMS 1.1.8 Бесплатно
- Цунами в Японии. Последствия.
- Предварительная инфа о FAPOS 1.1.9. Часть 2
- Описание версии CMS Fapos 0.9.9
- Новая версия Fapos 1.3
- Половина россиян не смогла отличить легальный контент
- Что есть Fapos CMS
- Убийца Apache у вас на пороге
- Открытое тестирование Fapos 0.9.9
Последние комментарии
Топ пользователей
Сайты на AtomX CMS
Часто бывает так, что нам необходимо иметь что-то типа супер глобальной переменной, которую мы могли бы использовать в любом месте нашего приложения. Не правда ли, удобно? Кто-то использует для этих целей супер глобальные массивы PHP, но это совсем не профессионально и лучше, если об этом никто не узнает.
Сейчас я хочу рассказать об одном из предопределенных интерфейсов PHP - ArrayAccess, который позволяет работать с объектами как с массивами, что очень удобно, а в связке с паттерном Singletone, мы получаем нечто вроде суперглобального массива для хранения чего угодно в нашем приложении.
Что такое интерфейс? Это нечто вроде указания, какие методы должны обязательно присутствовать в классе, который связан с интерфейсом. На пример интерфейс ArrayAccess обязывает нас иметь в своем классе четыре метода
А вот как будет выглядеть наш класс в связке с интерфейсом ArrayAccess
На мой взгляд, это очень удобно. А для того, что бы мы могли обращаться к нашему объекту из любого места, мы добавим в него немного магии паттерна Singletone.
Singletone позволяет предотвратить создание более чем одного объекта класса. При первом запросе, создается объек, а при остальных, нам просто возвращается указатель на уже созданный объект. Объясняю как могу, уж простите. Думаю сейчас поймете
Вот такое творение, схожее с массивом, но при этом доступное в любом месте, можно использовать как супер глобальный реестр для своих данных. В больших приложениях поступают именно так.
Важно учесть, что с объектом ArrayAccess мы можем работать как с массивом, только если речь идет о присвоении или выборке ключей, но функции для работы с массивами тут использовать не получится - возникнет ошибка.
Сейчас я хочу рассказать об одном из предопределенных интерфейсов PHP - ArrayAccess, который позволяет работать с объектами как с массивами, что очень удобно, а в связке с паттерном Singletone, мы получаем нечто вроде суперглобального массива для хранения чего угодно в нашем приложении.
Что такое интерфейс? Это нечто вроде указания, какие методы должны обязательно присутствовать в классе, который связан с интерфейсом. На пример интерфейс ArrayAccess обязывает нас иметь в своем классе четыре метода
1
2
3
4
5
<?php /* Methods */
abstract public boolean offsetExists ( mixed $offset )
abstract public mixed offsetGet ( mixed $offset )
abstract public void offsetSet ( mixed $offset , mixed $value )
abstract public void offsetUnset ( mixed $offset )?>
А вот как будет выглядеть наш класс в связке с интерфейсом ArrayAccess
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php class Reestr implements ArrayAccess {
private $container = array();
public function offsetSet($offset, $value) {
$this->container[$offset] = $value;
}
public function offsetExists($offset) {
return isset($this->container[$offset]);
}
public function offsetUnset($offset) {
unset($this->container[$offset]);
}
public function offsetGet($offset) {
return $this->container[$offset];
}
}
//Теперь мы можем работать с объектом этого класса как с массивом
$Reestr = new Reestr;
$Reestr['key'] = 'value';
echo $Reestr['key']; //выведет value?>
На мой взгляд, это очень удобно. А для того, что бы мы могли обращаться к нашему объекту из любого места, мы добавим в него немного магии паттерна Singletone.
Singletone позволяет предотвратить создание более чем одного объекта класса. При первом запросе, создается объек, а при остальных, нам просто возвращается указатель на уже созданный объект. Объясняю как могу, уж простите. Думаю сейчас поймете
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php class Reestr implements ArrayAccess {
private $container = array();
private static $instance = NULL;
public static function getInstance() {
if (self::instance === NULL) {
self::instance = new self();
}
return self::instance;
}
public function offsetSet($offset, $value) {
$this->container[$offset] = $value;
}
public function offsetExists($offset) {
return isset($this->container[$offset]);
}
public function offsetUnset($offset) {
unset($this->container[$offset]);
}
public function offsetGet($offset) {
return $this->container[$offset];
}
}
//Теперь важно создавать объект не как обычно а вызовом метода getInstance()
$Reestr = Reestr::getInstance();
$Reestr['key1'] = 'value1';
// Теперь попробуем создать новый объект
$obj = Reestr::getInstance();
echo $obj['key1']; //выведет value1
// так как $obj и $Reestr - это одно и тоже. Это и есть Singletone?>
Вот такое творение, схожее с массивом, но при этом доступное в любом месте, можно использовать как супер глобальный реестр для своих данных. В больших приложениях поступают именно так.
Важно учесть, что с объектом ArrayAccess мы можем работать как с массивом, только если речь идет о присвоении или выборке ключей, но функции для работы с массивами тут использовать не получится - возникнет ошибка.
Сейчас online: 47. Зарегистрированных: 0. Гостей: 47.
AtomX 2.8 Beta - Новая версия бесплатной CMS
AtomX 2.8 Beta - Новая версия бесплатной CMS
Программирование - что может быть проще.
Программирование - что может быть проще.
AtomX 2.8 Beta - Новая версия бесплатной CMS
AtomX 2.8 Beta - Новая версия бесплатной CMS
Написание простого вируса в блокноте
Что такое API и для чего они нужны
Классы в PHP для чайников
Написание простого вируса в блокноте