home *** CD-ROM | disk | FTP | other *** search
- <?php
- //
- // +----------------------------------------------------------------------+
- // | PEAR :: Cache |
- // +----------------------------------------------------------------------+
- // | Copyright (c) 1997-2003 The PHP Group |
- // +----------------------------------------------------------------------+
- // | This source file is subject to version 2.02 of the PHP license, |
- // | that is bundled with this package in the file LICENSE, and is |
- // | available at through the world-wide-web at |
- // | http://www.php.net/license/2_02.txt. |
- // | If you did not receive a copy of the PHP license and are unable to |
- // | obtain it through the world-wide-web, please send a note to |
- // | license@php.net so we can mail you a copy immediately. |
- // +----------------------------------------------------------------------+
- // | Authors: Richard Heyes <richard@phpguru.org> |
- // +----------------------------------------------------------------------+
- //
- // $Id: Application.php,v 1.5 2003/01/04 11:54:45 mj Exp $
-
- require_once 'Cache.php';
-
- // Application level variables
- //
- // Purpose
- // Variables that are persisent across all user sessions,
- // not just a specific user ala normal sessions.
- //
- // Usage:
- //
- // Example 1:
- //
- // $app =& new Cache_Application();
- // $_APP =& $app->getData();
- //
- // In this case the $_APP variable is akin to the $_SESSION variable.
- // If you add/remove stuff, it will be reflected in the next request
- // (of any user).
- //
- // Example 2:
- //
- // $foo = 'Some data';
- // $bar = 'Some other data';
- //
- // $app =& new Cache_Application();
- // $app->register('foo');
- // $app->register('bar', $bar);
- //
- // $foo = 'Different data';
- //
- // In this case the variables are registered with the register() function.
- // This is akin to session_register().
- //
- // As with session_register(), the contents of the variable at the *end* of the
- // request is registered and not at the point of registration. Therefore in this
- // example, for the $foo variable, the string 'Different data' is stored and not
- // 'Some data'. The exception to this rule is if you use the second argument to
- // register() as in the second call to it above. This will cause the data supplied
- // in the second argument to be stored and not the contents at the end of the request.
- //
- // Note: If you use this method with register_globals turned on, the variables will be
- // automatically globalled upon startup, (ie. when you create the object).
- //
- // Note: If you register a variable that is not set when the script finishes, it will
- // registered as NULL.
- //
- //
- // *** You are strongly recommended to use only one method of the two above. ***
- //
- // (In fact if you use the register() function with register_globals Off, you have to
- // use the $_APP method to get at the data).
-
- class Cache_Application extends Cache {
-
- var $data;
- var $id;
- var $group;
- var $registered_vars;
-
- /**
- * Constructor
- *
- * @param string Name of container class
- * @param array Array with container class options
- */
- function Cache_Application($container = 'file', $container_options = array('cache_dir' => '/tmp/', 'filename_prefix' => 'cache_'), $id = 'application_var', $group = 'application_cache')
- {
- $this->id = $id;
- $this->group = $group;
- $this->registered_vars = array();
-
- $this->Cache($container, $container_options);
- $this->data = $this->isCached($this->id, $this->group) ? unserialize($this->get($this->id, $this->group)) : array();
-
- // If register_globals on, global all registered variables
- if (ini_get('register_globals') AND is_array($this->data)) {
- foreach ($this->data as $key => $value) {
- global $$key;
- $$key = $value;
- }
- }
- }
-
- /**
- * Destructor
- *
- * Gets values of all registered variables and stores them. Then calls save() to
- * write data away.
- */
- function _Cache_Application()
- {
- // Get contents of all registered variables
- if (is_array($this->registered_vars) AND !empty($this->registered_vars)) {
- foreach ($this->registered_vars as $varname) {
- global $$varname;
- $this->data[$varname] = $$varname;
- }
- }
-
- // Save the data
- $this->save($this->id, serialize($this->data), 0, $this->group);
- }
-
- /**
- * register()
- *
- * Registers a variable to be stored.
- *
- * @param string Name of variable to register
- * @param mixed Optional data to store
- */
- function register($varname, $data = null)
- {
- if (isset($data)) {
- $this->data[$varname] = $data;
- } else {
- $this->registered_vars[] = $varname;
- }
- }
-
- /**
- * unregister()
- *
- * Unregisters a variable from being stored.
- *
- * @param string Name of variable to unregister
- */
- function unregister($varname)
- {
- if (isset($this->data[$varname])) {
- unset($this->data[$varname]);
- }
- }
-
- /**
- * clear()
- *
- * Removes all stored data
- */
- function clear()
- {
- $this->data = array();
- }
-
- /**
- * getData()
- *
- * Use this to get a reference to the data to manipulate
- * in calling script. Eg. $_APP =& $obj->getData();
- *
- * @return mixed A reference to the data
- */
- function &getData()
- {
- return $this->data;
- }
- }
- ?>