File indexing completed on 2024-12-22 05:36:52

0001 <?php
0002 /**
0003  * Zend Framework
0004  *
0005  * LICENSE
0006  *
0007  * This source file is subject to the new BSD license that is bundled
0008  * with this package in the file LICENSE.txt.
0009  * It is also available through the world-wide-web at this URL:
0010  * http://framework.zend.com/license/new-bsd
0011  * If you did not receive a copy of the license and are unable to
0012  * obtain it through the world-wide-web, please send an email
0013  * to license@zend.com so we can send you a copy immediately.
0014  *
0015  * @category   Zend
0016  * @package    Zend_Memory
0017  * @copyright  Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
0018  * @license    http://framework.zend.com/license/new-bsd     New BSD License
0019  * @version    $Id$
0020  */
0021 
0022 /**
0023  * Zend_Memory_Container_Interface
0024  */
0025 // require_once 'Zend/Memory/Container/Interface.php';
0026 
0027 /**
0028  * Memory object container access controller.
0029  *
0030  * Memory manager stores a list of generated objects to control them.
0031  * So container objects always have at least one reference and can't be automatically destroyed.
0032  *
0033  * This class is intended to be an userland proxy to memory container object.
0034  * It's not referenced by memory manager and class destructor is invoked immidiately after gouing
0035  * out of scope or unset operation.
0036  *
0037  * Class also provides Zend_Memory_Container_Interface interface and works as proxy for such cases.
0038  *
0039  * @category   Zend
0040  * @package    Zend_Memory
0041  * @copyright  Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
0042  * @license    http://framework.zend.com/license/new-bsd     New BSD License
0043  */
0044 class Zend_Memory_AccessController implements Zend_Memory_Container_Interface
0045 {
0046     /**
0047      * Memory container object
0048      *
0049      * @var Zend_Memory_Container
0050      */
0051     private $_memContainer;
0052 
0053 
0054     /**
0055      * Object constructor
0056      *
0057      * @param Zend_Memory_Container_Movable $memoryManager
0058      */
0059     public function __construct(Zend_Memory_Container_Movable $memContainer)
0060     {
0061         $this->_memContainer = $memContainer;
0062     }
0063 
0064     /**
0065      * Object destructor
0066      */
0067     public function __destruct()
0068     {
0069         $this->_memContainer->destroy();
0070     }
0071 
0072 
0073     /**
0074      * Get string value reference
0075      *
0076      * _Must_ be used for value access before PHP v 5.2
0077      * or _may_ be used for performance considerations
0078      *
0079      * @return &string
0080      */
0081     public function &getRef()
0082     {
0083         return $this->_memContainer->getRef();
0084     }
0085 
0086     /**
0087      * Signal, that value is updated by external code.
0088      *
0089      * Should be used together with getRef()
0090      */
0091     public function touch()
0092     {
0093         $this->_memContainer->touch();
0094     }
0095 
0096     /**
0097      * Lock object in memory.
0098      */
0099     public function lock()
0100     {
0101         $this->_memContainer->lock();
0102     }
0103 
0104 
0105     /**
0106      * Unlock object
0107      */
0108     public function unlock()
0109     {
0110         $this->_memContainer->unlock();
0111     }
0112 
0113     /**
0114      * Return true if object is locked
0115      *
0116      * @return boolean
0117      */
0118     public function isLocked()
0119     {
0120         return $this->_memContainer->isLocked();
0121     }
0122 
0123     /**
0124      * Get handler
0125      *
0126      * Loads object if necessary and moves it to the top of loaded objects list.
0127      * Swaps objects from the bottom of loaded objects list, if necessary.
0128      *
0129      * @param string $property
0130      * @return string
0131      * @throws Zend_Memory_Exception
0132      */
0133     public function __get($property)
0134     {
0135         return $this->_memContainer->$property;
0136     }
0137 
0138     /**
0139      * Set handler
0140      *
0141      * @param string $property
0142      * @param  string $value
0143      * @throws Zend_Exception
0144      */
0145     public function __set($property, $value)
0146     {
0147         $this->_memContainer->$property = $value;
0148     }
0149 }