[TASK] Deprecate callUserFunction "&" token for persistent objects 93/50693/6
authorBenni Mack <benni@typo3.org>
Thu, 17 Nov 2016 11:04:16 +0000 (12:04 +0100)
committerOliver Hader <oliver.hader@typo3.org>
Thu, 1 Dec 2016 17:27:46 +0000 (18:27 +0100)
The method GeneralUtility::callUserFunction() method allows
to call "&" to put this logic into a "persistent" pool. We already
have the SingletonInterface which should be used for objects
that should be persistent.

Currently there are two "persistent object pools", one for
makeInstance and one for callUserFunc, which makes it very hard
to understand which object is used when. Reducing complexity
and using the SingletonInterface everywhere should be the best practice.

Resolves: #78733
Releases: master
Change-Id: I6d3c57056c2b5ab411a9b9f488dc48c757b4a148
Reviewed-on: https://review.typo3.org/50693
Reviewed-by: Oliver Hader <oliver.hader@typo3.org>
Tested-by: Oliver Hader <oliver.hader@typo3.org>
Tested-by: TYPO3com <no-reply@typo3.com>
typo3/sysext/core/Classes/Utility/GeneralUtility.php
typo3/sysext/core/Documentation/Changelog/master/Deprecation-78733-CallUserFunctionTokenForSingletonObjects.rst [new file with mode: 0644]

index d21fc95..3bca874 100644 (file)
@@ -3740,6 +3740,10 @@ class GeneralUtility
         }
         // Check for persistent object token, "&"
         if ($funcRef[0] === '&') {
+            self::deprecationLog('Using the persistent object token "&" when resolving "' . $funcRef . '"  for '
+                . 'GeneralUtility::callUserFunc() is deprecated since TYPO3 v8. Make sure to implement '
+                . 'SingletonInterface to achieve the same functionality. This functionality will be removed in TYPO3 v9 '
+                . 'and will then result in a fatal PHP error.');
             $funcRef = substr($funcRef, 1);
             $storePersistentObject = true;
         } else {
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Deprecation-78733-CallUserFunctionTokenForSingletonObjects.rst b/typo3/sysext/core/Documentation/Changelog/master/Deprecation-78733-CallUserFunctionTokenForSingletonObjects.rst
new file mode 100644 (file)
index 0000000..2a5ad36
--- /dev/null
@@ -0,0 +1,37 @@
+.. include:: ../../Includes.txt
+
+======================================================================
+Deprecation: #78733 - CallUserFunction "&" token for singleton objects
+======================================================================
+
+See :issue:`78733`
+
+Description
+===========
+
+The method ``GeneralUtility::callUserFunction()`` allows to send the callee (the user-defined function)
+to be prepended with a "&" before the method name to add the instantiated object to a "singleton" pool
+during a single request. This functionality has been marked as deprecated as it can easily be solved by
+implementing a class as singleton.
+
+This way, the object is always a singleton, even when it is called via ``GeneralUtility::makeInstance()``.
+
+
+Impact
+======
+
+Calling ``callUserFunction()`` with a "&" symbol will trigger a deprecation log entry.
+
+
+Affected Installations
+======================
+
+Any installation with a hook or user function which is registered with an ampersand "&" symbol.
+
+
+Migration
+=========
+
+The class of the user function / method can implement the ``SingletonInterface`` to achieve the same behaviour.
+
+.. index:: PHP-API
\ No newline at end of file