Continued with debugging:
authorRoland Haeder <roland@mxchange.org>
Thu, 23 Feb 2017 21:00:39 +0000 (22:00 +0100)
committerRoland Haeder <roland@mxchange.org>
Tue, 28 Feb 2017 21:10:04 +0000 (22:10 +0100)
- added exception InvalidClassNameException which is only being thrown by
  ObjectFactory when the given class name is not following naming convention.
  This is now strictly applied to all objects being created by that factory.
- introduced stripNamespaceFromClassName()

Signed-off-by: Roland Häder <roland@mxchange.org>
inc/main/classes/class_BaseFrameworkSystem.php
inc/main/classes/factories/objects/class_ObjectFactory.php
inc/main/exceptions/main/class_InvalidClassNameException.php [new file with mode: 0644]

index 4ad02eda4ed88e3e21542f8fd2cff71e5643c855..f5e051041c47dd9c032909993b6509be01b4b09d 100644 (file)
@@ -507,6 +507,9 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
         * @return      void
         */
        public static final function __callStatic ($methodName, $args) {
+               // Trace message
+               //* PRINT-DEBUG: */ printf('[%s:%d]: methodName=%s,args[]=%s - CALLED!' . PHP_EOL, __METHOD__, __LINE__, $methodName, gettype($args));
+
                // Init argument string
                $argsString = '';
 
index 2a5a46ef4b7ba8db105c1daca8b2bd306d2653cb..a77c3e17d88ef60ea09b32733facf07e23bf04fe 100644 (file)
@@ -64,7 +64,7 @@ class ObjectFactory extends BaseFactory {
                }
 
                // Create method name
-               $methodName = sprintf('create%s', $className);
+               $methodName = sprintf('create%s', self::stripNamespaceFromClassName($className));
 
                // Run the user function
                $objectInstance = call_user_func_array(array($className, $methodName), $args);
@@ -94,4 +94,30 @@ class ObjectFactory extends BaseFactory {
                return $objectInstance;
        }
 
+       /**
+        * Strips of namespace from given class name. An exception is thrown when
+        * there is no namespace found as this is the now the norm for any objects
+        * being created with this object factory.
+        *
+        * @param       $fullClassName  Class name with namespace
+        * @return      $shortClassName Stripped class name (no namespace)
+        * @throws      InvalidClassNameException       If the class name does not follow naming convention
+        */
+       private static function stripNamespaceFromClassName ($fullClassName) {
+               // The class name should contain at least 2 back-slashes, so split at them
+               $classNameParts = explode("\\", $fullClassName);
+
+               // At least 3 parts should be there
+               if (count($classNameParts) < 3) {
+                       // Namespace scheme is: Project\Package[\SubPackage...]
+                       throw new InvalidClassNameException($fullClassName, self::EXCEPTION_INVALID_CLASS_NAME);
+               } // END - if
+
+               // Get last element
+               $shortClassName = array_pop($classNameParts);
+
+               // Return it
+               return $shortClassName;
+       }
+
 }
diff --git a/inc/main/exceptions/main/class_InvalidClassNameException.php b/inc/main/exceptions/main/class_InvalidClassNameException.php
new file mode 100644 (file)
index 0000000..40202ed
--- /dev/null
@@ -0,0 +1,50 @@
+<?php
+// Own namespace
+namespace CoreFramework\Deprecated;
+
+// Import framework stuff
+use CoreFramework\Generic\FrameworkInterface;
+
+/**
+ * An exception thrown when a class name is invalid after naming convention.
+ *
+ * @author             Roland Haeder <webmaster@shipsimu.org>
+ * @version            0.0.0
+ * @copyright  Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2017 Core Developer Team
+ * @license            GNU GPL 3.0 or any newer version
+ * @link               http://www.shipsimu.org
+ * @deprecated Don't use this anymore
+ *
+ * This program 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+class InvalidObjectException extends FrameworkException {
+       /**
+        * The constructor
+        *
+        * @param       $className      Class name that is invalid
+        * @param       $code   Code number for the exception
+        * @return      void
+        */
+       public function __construct ($className, $code) {
+               // Add a message around the missing class
+               $message = sprintf('[%d]: Class name "%s" is not conform to naming-convention: Project\Package[\SubPackage...]\SomeFooBar',
+                       $this->getLine(),
+                       $className
+               );
+
+               // Call parent constructor
+               parent::__construct($message, $code);
+       }
+
+}