[!!!][TASK] Harden \TYPO3\CMS\Extbase\DomainObject\DomainObjectInterface 02/59602/5
authorAlexander Schnitzler <git@alexanderschnitzler.de>
Thu, 31 Jan 2019 20:41:57 +0000 (21:41 +0100)
committerAnja Leichsenring <aleichsenring@ab-softlab.de>
Fri, 1 Feb 2019 10:30:38 +0000 (11:30 +0100)
- Use strict type mode
- Use type hints whereever possible

Releases: master
Resolves: #87608
Change-Id: I3fc153c68bb29aa85517965c6d4d8414d25af35b
Reviewed-on: https://review.typo3.org/59602
Reviewed-by: Mona Muzaffar <mona.muzaffar@gmx.de>
Tested-by: Mona Muzaffar <mona.muzaffar@gmx.de>
Tested-by: TYPO3com <noreply@typo3.com>
Reviewed-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
Tested-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
typo3/sysext/belog/Classes/Domain/Model/LogEntry.php
typo3/sysext/core/Documentation/Changelog/master/Breaking-87594-HardenExtbase.rst [new file with mode: 0644]
typo3/sysext/extbase/Classes/DomainObject/AbstractDomainObject.php
typo3/sysext/extbase/Classes/DomainObject/DomainObjectInterface.php
typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/blog_example/Classes/Domain/Model/TtContent.php

index faeda44..7115b8f 100644 (file)
@@ -140,26 +140,6 @@ class LogEntry extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity
     protected $newId = 0;
 
     /**
-     * Set pid
-     *
-     * @param int $pid
-     */
-    public function setPid($pid)
-    {
-        $this->pid = (int)$pid;
-    }
-
-    /**
-     * Get pid
-     *
-     * @return int
-     */
-    public function getPid()
-    {
-        return $this->pid;
-    }
-
-    /**
      * Set backend user uid
      *
      * @param int $beUserUid
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Breaking-87594-HardenExtbase.rst b/typo3/sysext/core/Documentation/Changelog/master/Breaking-87594-HardenExtbase.rst
new file mode 100644 (file)
index 0000000..edba892
--- /dev/null
@@ -0,0 +1,50 @@
+.. include:: ../../Includes.txt
+
+=================================
+Breaking: #87594 - Harden extbase
+=================================
+
+See :issue:`87594`
+
+Description
+===========
+
+While hardening Extbase classes, method signatures changed due to an enforced strict type mode and introduced type hints for scalars. The change of signatures is considered breaking for the following methods of the following interfaces and their implementations and for the following classes and their derivatives:
+
+- :php:`\TYPO3\CMS\Extbase\DomainObject\DomainObjectInterface::getUid`
+- :php:`\TYPO3\CMS\Extbase\DomainObject\DomainObjectInterface::setPid`
+- :php:`\TYPO3\CMS\Extbase\DomainObject\DomainObjectInterface::getPid`
+- :php:`\TYPO3\CMS\Extbase\DomainObject\DomainObjectInterface::_isNew`
+- :php:`\TYPO3\CMS\Extbase\DomainObject\DomainObjectInterface::_setProperty`
+- :php:`\TYPO3\CMS\Extbase\DomainObject\DomainObjectInterface::_getProperty`
+- :php:`\TYPO3\CMS\Extbase\DomainObject\DomainObjectInterface::_getProperties`
+- :php:`\TYPO3\CMS\Extbase\DomainObject\DomainObjectInterface::_getCleanProperty`
+- :php:`\TYPO3\CMS\Extbase\DomainObject\AbstractDomainObject::getUid`
+- :php:`\TYPO3\CMS\Extbase\DomainObject\AbstractDomainObject::setPid`
+- :php:`\TYPO3\CMS\Extbase\DomainObject\AbstractDomainObject::getPid`
+- :php:`\TYPO3\CMS\Extbase\DomainObject\AbstractDomainObject::_isNew`
+- :php:`\TYPO3\CMS\Extbase\DomainObject\AbstractDomainObject::_setProperty`
+- :php:`\TYPO3\CMS\Extbase\DomainObject\AbstractDomainObject::_getProperty`
+- :php:`\TYPO3\CMS\Extbase\DomainObject\AbstractDomainObject::_getProperties`
+- :php:`\TYPO3\CMS\Extbase\DomainObject\AbstractDomainObject::_getCleanProperty`
+
+
+Impact
+======
+
+PHP might throw a fatal error if the method signature(s) of your implementations/derivatives aren't compatible with the interface(s) and/or parent class(es).
+
+
+Affected Installations
+======================
+
+- All installations that use classes, that implement mentioned interfaces and their methods.
+- All installations that use classes, that inherit mentioned classes and overwrite their methods.
+
+
+Migration
+=========
+
+Methods need to be adjusted to be compatible with the parent class and/or interface signature.
+
+.. index:: PHP-API, NotScanned
index 6f22de2..6582e87 100644 (file)
@@ -1,4 +1,6 @@
 <?php
+declare(strict_types = 1);
+
 namespace TYPO3\CMS\Extbase\DomainObject;
 
 /*
@@ -66,7 +68,7 @@ abstract class AbstractDomainObject implements DomainObjectInterface, \TYPO3\CMS
      *
      * @return int the uid or NULL if none set yet.
      */
-    public function getUid()
+    public function getUid(): ?int
     {
         if ($this->uid !== null) {
             return (int)$this->uid;
@@ -77,23 +79,19 @@ abstract class AbstractDomainObject implements DomainObjectInterface, \TYPO3\CMS
     /**
      * Setter for the pid.
      *
-     * @param int|null $pid
+     * @param int $pid
      */
-    public function setPid($pid)
+    public function setPid(int $pid): void
     {
-        if ($pid === null) {
-            $this->pid = null;
-        } else {
-            $this->pid = (int)$pid;
-        }
+        $this->pid = $pid;
     }
 
     /**
      * Getter for the pid.
      *
-     * @return int The pid or NULL if none set yet.
+     * @return int|null The pid or NULL if none set yet.
      */
-    public function getPid()
+    public function getPid(): ?int
     {
         if ($this->pid === null) {
             return null;
@@ -107,8 +105,9 @@ abstract class AbstractDomainObject implements DomainObjectInterface, \TYPO3\CMS
      * @param string $propertyName
      * @param mixed $propertyValue
      * @return bool
+     * @internal
      */
-    public function _setProperty($propertyName, $propertyValue)
+    public function _setProperty(string $propertyName, $propertyValue)
     {
         if ($this->_hasProperty($propertyName)) {
             $this->{$propertyName} = $propertyValue;
@@ -122,8 +121,9 @@ abstract class AbstractDomainObject implements DomainObjectInterface, \TYPO3\CMS
      *
      * @param string $propertyName
      * @return mixed The propertyValue
+     * @internal
      */
-    public function _getProperty($propertyName)
+    public function _getProperty(string $propertyName)
     {
         return $this->{$propertyName};
     }
@@ -132,8 +132,9 @@ abstract class AbstractDomainObject implements DomainObjectInterface, \TYPO3\CMS
      * Returns a hash map of property names and property values. Only for internal use.
      *
      * @return array The properties
+     * @internal
      */
-    public function _getProperties()
+    public function _getProperties(): array
     {
         $properties = get_object_vars($this);
         foreach ($properties as $propertyName => $propertyValue) {
@@ -149,6 +150,7 @@ abstract class AbstractDomainObject implements DomainObjectInterface, \TYPO3\CMS
      *
      * @param string $propertyName
      * @return bool TRUE bool true if the property exists, FALSE if it doesn't exist or NULL in case of an error.
+     * @internal
      */
     public function _hasProperty($propertyName)
     {
@@ -159,8 +161,9 @@ abstract class AbstractDomainObject implements DomainObjectInterface, \TYPO3\CMS
      * Returns TRUE if the object is new (the uid was not set, yet). Only for internal use
      *
      * @return bool
+     * @internal
      */
-    public function _isNew()
+    public function _isNew(): bool
     {
         return $this->uid === null;
     }
@@ -229,8 +232,9 @@ abstract class AbstractDomainObject implements DomainObjectInterface, \TYPO3\CMS
      *
      * @param string $propertyName The name of the property to be memorized.
      * @return mixed The clean property value or NULL
+     * @internal
      */
-    public function _getCleanProperty($propertyName)
+    public function _getCleanProperty(string $propertyName)
     {
         return $this->_cleanProperties[$propertyName] ?? null;
     }
index d5e0c61..1f9f535 100644 (file)
@@ -1,4 +1,6 @@
 <?php
+declare(strict_types = 1);
+
 namespace TYPO3\CMS\Extbase\DomainObject;
 
 /*
@@ -29,51 +31,55 @@ interface DomainObjectInterface
      *
      * @return int The uid or NULL if none set yet.
      */
-    public function getUid();
+    public function getUid(): ?int;
 
     /**
      * Setter for the pid.
      *
      * @param int $pid
      */
-    public function setPid($pid);
+    public function setPid(int $pid);
 
     /**
      * Getter for the pid.
      *
      * @return int The pid or NULL if none set yet.
      */
-    public function getPid();
+    public function getPid(): ?int;
 
     /**
      * Returns TRUE if the object is new (the uid was not set, yet). Only for internal use
      *
      * @return bool
+     * @internal
      */
-    public function _isNew();
+    public function _isNew(): bool;
 
     /**
      * Reconstitutes a property. Only for internal use.
      *
      * @param string $propertyName
-     * @param string $value
+     * @param mixed $value
+     * @internal
      */
-    public function _setProperty($propertyName, $value);
+    public function _setProperty(string $propertyName, $value);
 
     /**
      * Returns the property value of the given property name. Only for internal use.
      *
      * @param string $propertyName
      * @return mixed The propertyValue
+     * @internal
      */
-    public function _getProperty($propertyName);
+    public function _getProperty(string $propertyName);
 
     /**
      * Returns a hash map of property names and property values
      *
      * @return array The properties
+     * @internal
      */
-    public function _getProperties();
+    public function _getProperties(): array;
 
     /**
      * Returns the clean value of the given property. The returned value will be NULL if the clean state was not memorized before, or
@@ -81,6 +87,7 @@ interface DomainObjectInterface
      *
      * @param string $propertyName The name of the property to be memorized.
      * @return mixed The clean property value or NULL
+     * @internal
      */
-    public function _getCleanProperty($propertyName);
+    public function _getCleanProperty(string $propertyName);
 }
index 4341ac9..9c77dfe 100644 (file)
@@ -26,16 +26,16 @@ class TtContent extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity
     /**
      * uid
      *
-     * @var string
+     * @var int|null
      */
-    protected $uid = '';
+    protected $uid;
 
     /**
      * pid
      *
-     * @var string
+     * @var int|null
      */
-    protected $pid = '';
+    protected $pid;
 
     /**
      * @var string
@@ -65,26 +65,6 @@ class TtContent extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity
     }
 
     /**
-     * Gets the uid
-     *
-     * @return string $uid
-     */
-    public function getUid()
-    {
-        return $this->uid;
-    }
-
-    /**
-     * Gets the pid
-     *
-     * @return string $pid
-     */
-    public function getPid()
-    {
-        return $this->pid;
-    }
-
-    /**
      * Returns the header
      *
      * @return string $header