|
TYPO3 API
SVNRelease
|
00001 <?php 00002 /*************************************************************** 00003 * Copyright notice 00004 * 00005 * (c) 2009 Jochen Rau <jochen.rau@typoplanet.de> 00006 * All rights reserved 00007 * 00008 * This class is a backport of the corresponding class of FLOW3. 00009 * All credits go to the v5 team. 00010 * 00011 * This script is part of the TYPO3 project. The TYPO3 project is 00012 * free software; you can redistribute it and/or modify 00013 * it under the terms of the GNU General Public License as published by 00014 * the Free Software Foundation; either version 2 of the License, or 00015 * (at your option) any later version. 00016 * 00017 * The GNU General Public License can be found at 00018 * http://www.gnu.org/copyleft/gpl.html. 00019 * 00020 * This script is distributed in the hope that it will be useful, 00021 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00022 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00023 * GNU General Public License for more details. 00024 * 00025 * This copyright notice MUST APPEAR in all copies of the script! 00026 ***************************************************************/ 00027 00028 /** 00029 * Implementation of the default Extbase Object Manager 00030 * 00031 * @package Extbase 00032 * @subpackage Object 00033 */ 00034 class Tx_Extbase_Object_ObjectManager implements Tx_Extbase_Object_ObjectManagerInterface { 00035 00036 /** 00037 * @var Tx_Extbase_Object_Container_Container 00038 */ 00039 protected $objectContainer; 00040 00041 /** 00042 * Constructs a new Object Manager 00043 */ 00044 public function __construct() { 00045 $this->objectContainer = t3lib_div::makeInstance('Tx_Extbase_Object_Container_Container'); // Singleton 00046 } 00047 00048 /** 00049 * Returns a fresh or existing instance of the object specified by $objectName. 00050 * 00051 * Important: 00052 * 00053 * If possible, instances of Prototype objects should always be created with the 00054 * Object Manager's create() method and Singleton objects should rather be 00055 * injected by some type of Dependency Injection. 00056 * 00057 * @param string $objectName The name of the object to return an instance of 00058 * @return object The object instance 00059 * @api 00060 */ 00061 public function get($objectName) { 00062 $arguments = func_get_args(); 00063 array_shift($arguments); 00064 return $this->objectContainer->getInstance($objectName, $arguments); 00065 } 00066 00067 /** 00068 * Creates a fresh instance of the object specified by $objectName. 00069 * 00070 * This factory method can only create objects of the scope prototype. 00071 * Singleton objects must be either injected by some type of Dependency Injection or 00072 * if that is not possible, be retrieved by the get() method of the 00073 * Object Manager 00074 * 00075 * @param string $objectName The name of the object to create 00076 * @return object The new object instance 00077 * @throws Tx_Extbase_Object_Exception_WrongScropeException if the created object is not of scope prototype 00078 * @api 00079 */ 00080 public function create($objectName) { 00081 $arguments = func_get_args(); 00082 array_shift($arguments); 00083 $instance = $this->objectContainer->getInstance($objectName, $arguments); 00084 00085 if ($instance instanceof t3lib_Singleton) { 00086 throw new Tx_Extbase_Object_Exception_WrongScope('Object "' . $objectName . '" is of not of scope prototype, but only prototype is supported by create()', 1265203124); 00087 } 00088 00089 return $instance; 00090 } 00091 } 00092 00093 ?>
1.8.0