Adds two new database object interface.
authorMatthias Schmidt <gravatronics@live.com>
Sat, 30 Jun 2012 10:10:26 +0000 (12:10 +0200)
committerMatthias Schmidt <gravatronics@live.com>
Sat, 30 Jun 2012 14:01:12 +0000 (16:01 +0200)
The two new database object interfaces are:

- `wcf\data\ILinkableDatabaseObject`
- `wcf\data\ITitledDatabaseObject`

These interfaces **only** exist to avoid the problem of extending two different interfaces with the same method.

For example, a certain database object implements `wcf\system\request\IRouteController` which has a method `getTitle()` and also implements another interface (e.g. `wcf\data\IOtherDatabaseObject`) which requires the same method. PHP can't handle that: `Can't inherit abstract function IRouteableDatabaseObject::getTitle() (previously declared abstract in IOtherDatabaseObject)`.

If both interfaces extend the `wcf\data\ITitledDatabaseObject` interface, PHP has no problem and this avoids having to rename the `getTitle()` method in the second interface to a (hopefully) unique name like `getOtherTitle()` which would also pollute the class with methods doing the same thing, just having a different name.

wcfsetup/install/files/lib/data/ILinkableDatabaseObject.class.php [new file with mode: 0644]
wcfsetup/install/files/lib/data/ITitledDatabaseObject.class.php [new file with mode: 0644]
wcfsetup/install/files/lib/system/request/IRouteController.class.php

diff --git a/wcfsetup/install/files/lib/data/ILinkableDatabaseObject.class.php b/wcfsetup/install/files/lib/data/ILinkableDatabaseObject.class.php
new file mode 100644 (file)
index 0000000..e641fe4
--- /dev/null
@@ -0,0 +1,21 @@
+<?php
+namespace wcf\data;
+
+/**
+ * This interface provides a method to access the link to a database object.
+ * 
+ * @author     Matthias Schmidt
+ * @copyright  2001-2012 WoltLab GmbH
+ * @license    GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
+ * @package    com.woltlab.wcf
+ * @subpackage data
+ * @category   Community Framework
+ */
+interface ILinkableDatabaseObject {
+       /**
+        * Returns the link to this database object.
+        * 
+        * @return      string
+        */
+       public function getLink();
+}
\ No newline at end of file
diff --git a/wcfsetup/install/files/lib/data/ITitledDatabaseObject.class.php b/wcfsetup/install/files/lib/data/ITitledDatabaseObject.class.php
new file mode 100644 (file)
index 0000000..f005653
--- /dev/null
@@ -0,0 +1,21 @@
+<?php
+namespace wcf\data;
+
+/**
+ * This interface provides a method to access the title of a database object.
+ * 
+ * @author     Matthias Schmidt
+ * @copyright  2001-2012 WoltLab GmbH
+ * @license    GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
+ * @package    com.woltlab.wcf
+ * @subpackage data
+ * @category   Community Framework
+ */
+interface ITitledDatabaseObject {
+       /**
+        * Returns the title of this database object.
+        * 
+        * @return      string
+        */
+       public function getTitle();
+}
\ No newline at end of file
index 9014e19213c091fdb84a23ea0346accc2f27a69b..6eb1b091104bfd5d8bebf6262cbda35a5b04963b 100644 (file)
@@ -1,5 +1,6 @@
 <?php
 namespace wcf\system\request;
+use wcf\data\ITitledDatabaseObject;
 
 /**
  * Default interface for route controllers.
@@ -11,18 +12,11 @@ namespace wcf\system\request;
  * @subpackage system.request
  * @category   Community Framework
  */
-interface IRouteController {
+interface IRouteController extends ITitledDatabaseObject {
        /**
         * Returns the object id.
         * 
         * @return      integer
         */
        public function getID();
-       
-       /**
-        * Returns the object title.
-        * 
-        * @return      string
-        */
-       public function getTitle();
 }