Coverage for Doctrine_Locator_Injectable

Back to coverage report

1 <?php
2 /**
3  *  $Id$
4  *
5  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
6  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
7  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
8  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
9  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
10  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
11  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
12  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
13  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
14  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
15  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
16  *
17  * This software consists of voluntary contributions made by many individuals
18  * and is licensed under the LGPL. For more information, see
19  * <http://www.phpdoctrine.net>.
20  */
21
22 /**
23  * Doctrine_Locator_Injectable
24  *
25  * @package     Doctrine
26  * @subpackage  Doctrine_Locator
27  * @category    Locator
28  * @license     http://www.gnu.org/licenses/lgpl.txt LGPL
29  * @link        http://www.phpdoctrine.net
30  * @author      Janne Vanhala <jpvanhal@cc.hut.fi>
31  * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
32  * @author      Eevert Saukkokoski <dmnEe0@gmail.com>
33  * @version     $Revision$
34  * @since       1.0
35  */
36 class Doctrine_Locator_Injectable
37 {
38     /**
39      * @var Doctrine_Locator      the locator object
40      */
41     protected $_locator;
42     /**
43      * @var array               an array of bound resources
44      */
45     protected $_resources = array();
46     /**
47      * @var Doctrine_Null $null     Doctrine_Null object, used for extremely fast null value checking
48      */
49     protected static $_null;
50     /**
51      * setLocator
52      * this method can be used for setting the locator object locally
53      *
54      * @param Doctrine_Locator                the locator object
55      * @return Doctrine_Locator_Injectable    this instance
56      */
57     public function setLocator(Doctrine_Locator $locator)
58     {
59         $this->_locator = $locator;
60         return $this;
61     }
62     /**
63      * getLocator
64      * returns the locator associated with this object
65      * 
66      * if there are no locator locally associated then
67      * this method tries to fetch the current global locator
68      *
69      * @return Doctrine_Locator
70      */
71     public function getLocator()
72     {
73         if ( ! isset($this->_locator)) {
74             $this->_locator = Doctrine_Locator::instance();
75
76         }
77         return $this->_locator;
78     }
79     /**
80      * locate
81      * locates a resource by given name and returns it
82      *
83      * if the resource cannot be found locally this method tries
84      * to use the global locator for finding the resource
85      *
86      * @see Doctrine_Locator::locate()
87      * @throws Doctrine_Locator_Exception     if the resource could not be found
88      * @param string $name                  the name of the resource
89      * @return mixed                        the located resource
90      */
91     public function locate($name)
92     {
93         if (isset($this->_resources[$name])) {
94             if (is_object($this->_resources[$name])) {
95                 return $this->_resources[$name];
96             } else {
97                 // get the name of the concrete implementation
98                 $concreteImpl = $this->_resources[$name];
99                 
100                 return $this->getLocator()->locate($concreteImpl);
101             }
102         } else {
103             return $this->getLocator()->locate($name);
104         }
105     }
106     /**
107      * bind
108      * binds a resource to a name
109      *
110      * @param string $name      the name of the resource to bind
111      * @param mixed $value      the value of the resource
112      * @return Doctrine_Locator   this object
113      */
114     public function bind($name, $resource)
115     {
116         $this->_resources[$name] = $resource;
117         
118         return $this;    
119     }
120
121     /**
122      * initNullObject
123      * initializes the null object
124      *
125      * @param Doctrine_Null $null
126      * @return void
127      */
128     public static function initNullObject(Doctrine_Null $null)
129     {
130         self::$_null = $null;
131     }
132     /**
133      * getNullObject
134      * returns the null object associated with this object
135      *
136      * @return Doctrine_Null
137      */
138     public static function getNullObject()
139     {
140         return self::$_null;
141     }
142 }