[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: где хранить объекты
Guest
где нужно хранить объекты, чтобы использовать их в различных местах?

в сессиях хранить - это нормально? допустим сериализировать, потом записать в сессию?






Спустя 4 минуты, 37 секунд (12.11.2010 - 01:35) Sanchopansa написал(а):
они итак хранятся.. в памяти.. или это неправильно задан вопрос?

Спустя 1 минута, 17 секунд (12.11.2010 - 01:36) inpost написал(а):
Можно вообще в отдельном файле и подключать в начале каждой страницы:
include './F_obj.php';

Спустя 9 минут, 57 секунд (12.11.2010 - 01:46) Guest написал(а):
inpost
я говорю про объекты(экземпляр), а не класс...

Sanchopansa
они хранятся в памяти в течение одного скрипта.

в других языках, а если конкретно , например в actionscript, весь процесс разработки - как одно целое, создавая экземпляр - его можно использовать везде.

А что, если я хочу чтобы и тут все как одно целое было, но получается создавая экземпляр класса, я понимаю, что после исполнения данной страницы - он сдохнет.

вот и думаю, засовывать их в сессию? и удалять после использования, или как? как на php делается?

Спустя 6 минут, 19 секунд (12.11.2010 - 01:52) Sanchopansa написал(а):
блин.. ну можешь еще ИМХО в БД писать... это как тебе угодно будет....

Спустя 5 минут, 35 секунд (12.11.2010 - 01:58) ZSH написал(а):

file_put_contents('obj_1.php', seirialise($obj)); // сохраняем


$obj = unserialize(file_get_contents('obj_1.php')); //считываем

Спустя 14 минут, 31 секунда (12.11.2010 - 02:12) Guest написал(а):
ZSH
это если на сайте один пользователь я так понимаю))

Спустя 24 минуты, 7 секунд (12.11.2010 - 02:37) ZSH написал(а):
Это для примера, если объект большой то лучше сохранить в файл с уникальным именем

хотя можно и в сессии

Спустя 16 часов, 45 минут, 26 секунд (12.11.2010 - 19:22) linker написал(а):
Кэш.

Спустя 19 дней, 16 часов, 12 минут, 38 секунд (2.12.2010 - 11:35) ramallah написал(а):
я делаю так для глобальных классов (для примера):

1. Создаю файл с классом.
database.php, BDClass()

2. В самом первом index.php подключаю и создаю объект и объявляю его как global.
include_once("database.php");
global $db;
$db = new BDClass();

3. Для использования в других классах перед использованием снова пишу:
global $db
тем самым получая линк на объект.

Спустя 1 час, 11 минут, 16 секунд (2.12.2010 - 12:46) SlavaFr написал(а):
если оbjects действительно пренадлежат определенному клиенту и должны сохронятся на протяжении одной сессии, то конечно можно для этих целей использовать сессию. к стате обсолютно не обязательно object сериалозировать, так как это проиходит автоматически.
$_SESSION['odinobjekt']=$instance;
Важно конечно если object состоит из ресурсов правильно описать в class как он должен сериализироватся и десериализироватся используя методы __sleep() и __wakeup()

Спустя 20 дней, 3 часа, 55 минут, 29 секунд (22.12.2010 - 16:41) elliot написал(а):
Если получить доступ к объектам в различных частях программы, то я пользуюсь 2-мя паттернами:

1) Singleton (одиночка) - когда нужен 1 объект одного класса:

class Logger {
static $instance = null;

static function getInstance()
{
if (self::$instance == null) {
self::$instance = new self();
}

return self::$instance;
}


public function log($message)
{
// логирование сообщения
}
}


// доступ из любого места приложения к единственному экземпляру класса
Logger::getInstance()->log('hello');

// или получаем объект
$logger = Logger::getInstance();
$logger->log('hello');


2) Registry (реестр) - когда нужно хранить несколько объектов разных классов:

class Registry {

static protected $storage;

static function &get($name)
{
if (self::has($name)) {
return self::$storage[$name];
}

return null;
}


static function set($name, &$item)
{
self::$storage[$name] = $item;
}


static function has($name)
{
return isset(self::$storage[$name]);
}



static function getData()
{
return self::$storage;
}

}



// рассмотрим на примере комментария ramallah
include_once("database.php");

Registry::set('db', new BDClass());


// в другом файле, чтобы не писать глобал (что отвратительно!) пишем:
$db = Registry::get('db');


Всем кто не читал, советую найти и прочитать книгу Мартина Фаулера "Архитектура корпоративных программных приложений". В сети находил на русском. Если не найдете стукните на мыло в профиле - отправлю :)

Спустя 29 минут, 46 секунд (22.12.2010 - 17:11) Гость_KaFe написал(а):
elliot да именно, хранить лучше в них. Все остальные советы УГ, кроме кэша. Вопрос просто был задан не правильно smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.