#9520: add a scheme to support singletons with t3lib_div::makeInstance
authorMartin Kutschker <martin.t.kutschker@blackbox.net>
Tue, 14 Oct 2008 17:25:23 +0000 (17:25 +0000)
committerMartin Kutschker <martin.t.kutschker@blackbox.net>
Tue, 14 Oct 2008 17:25:23 +0000 (17:25 +0000)
git-svn-id: https://svn.typo3.org/TYPO3v4/Core/trunk@4315 709f56b5-9817-0410-a4d7-c38de5d9e867

ChangeLog
NEWS.txt
t3lib/class.t3lib_div.php
t3lib/interfaces/interface.t3lib_singleton.php [new file with mode: 0644]

index cd36eef..9613d0c 100755 (executable)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,7 @@
 2008-10-14  Martin Kutschker  <masi@typo3.org>
 
-       * #9501: Titles of content columns in classic page module doesn't take into account backend charset (thanx to Steffen Kamper and Vladimir Podkovanov)
+       * Fixed bug #9501: Titles of content columns in classic page module doesn't take into account backend charset (thanx to Steffen Kamper and Vladimir Podkovanov)
+       * Added feature #9520: add a scheme to support singletons with t3lib_div::makeInstance
 
 2008-10-14  Ernesto Baschny  <ernst@cron-it.de>
 
@@ -16,7 +17,7 @@
 
 2008-10-10  Stanislas Rolland  <typo3@sjbr.ca>
 
-       * Added feature #7970: htmlARea RTE: fontstyle and fontsize should not use deprecated font tag
+       * Added feature #7970: htmlArea RTE: fontstyle and fontsize should not use deprecated font tag
 
 2008-10-10  Dmitry Dulepov  <dmitry@typo3.org>
 
index abef366..fe58337 100644 (file)
--- a/NEWS.txt
+++ b/NEWS.txt
@@ -12,7 +12,7 @@ Backend
 ==================
 
        * Extension Manager: You can now set a new option "excludeFromUpdates" in every
-         every extensions' ext_emconf.php array. This way, it is a) not shown in the 
+         every extensions' ext_emconf.php array. This way, it is a) not shown in the
          list of extensions to update and b) is shown a exclamation mark in order to
          prevent updates for this extension. This is very useful if you made local changes
          to an extension and don't want any admin to overwrite them.
@@ -44,7 +44,8 @@ Development
 TypoScript changes
 ==================
 
-       * ...
+       * t3lib_div::makeInstance now supports singletons. To mark a class as a
+         singleton it must implement the t3lib_singleton interface.
 
 Database changes
 ================
@@ -90,7 +91,7 @@ Frontend features
          fileadmin/ directories automatically with config.absRefPrefix. Using the new variable
          administrators can tell TYPO3 to prepend also other directories inside the site root
          with config.absRefPrefix.
-         
+
        * Added new Install tool option named "dbClientCompress". This option will
          enable MySQL compression for network traffic. This is useful if
          MySQl is not on the same host as the web server. Do not use this option if MySQL
index 771854e..ebaa0cd 100755 (executable)
@@ -4608,6 +4608,8 @@ final class t3lib_div {
         * @return      object          A reference to the object
         */
        public static function &makeInstance($className)        {
+                       // holds references of singletons
+               static $instances = array();
 
                        // Load class file if not found:
                if (!class_exists($className))  {
@@ -4619,8 +4621,16 @@ final class t3lib_div {
                        // Get final classname
                $className =  t3lib_div::makeInstanceClassName($className);
 
+               if (isset($instances[$className])) {
+                       return $instances[$className];
+               }
+               $instance = new $className;
+               if ($instance instanceof t3lib_singleton) {
+                       $instances[$className] = $instance;
+               }
+
                        // Return object.
-               return new $className;
+               return $instance;
        }
 
        /**
diff --git a/t3lib/interfaces/interface.t3lib_singleton.php b/t3lib/interfaces/interface.t3lib_singleton.php
new file mode 100644 (file)
index 0000000..674556e
--- /dev/null
@@ -0,0 +1,40 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2008 Robert Lemke <robert@typo3.org>, Martin Kutschker <masi@typo3.org>
+*  All rights reserved
+*
+*  This script is part of the TYPO3 project. The TYPO3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*  A copy is found in the textfile GPL.txt and important notices to the license
+*  from the author is found in LICENSE.txt distributed with these scripts.
+*
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+
+/**
+ * "empty" interface for singletons (marker interface pattern)
+ *
+ * @author     Martin Kutschker <masi@typo3.org>
+ * @package TYPO3
+ * @subpackage t3lib
+ * @see t3lib_div::makeInstance()
+ */
+interface t3lib_singleton {
+       // deliberately empty
+}
+
+?>
\ No newline at end of file