From 08178fd2d0ae8ecd3b8f943c0b43cc0b4cfff9cd Mon Sep 17 00:00:00 2001 From: =?utf8?q?Roland=20H=C3=A4der?= Date: Sat, 14 Apr 2018 01:37:57 +0200 Subject: [PATCH] Continued: - rewrote ObjectFactory for some performance improvement, yet still more needs to be done, maybe some static "cache" array and then use reflection to clean up old instance? - debug messages are now "hidden" in HTML comment blocks - InvalidClassNameException is now emptied and InvalidArgumentException is used instead MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Roland Häder --- .../factories/objects/class_ObjectFactory.php | 29 ++++++----- .../output/debug/web/class_DebugWebOutput.php | 4 +- .../main/class_InvalidClassNameException.php | 51 +------------------ 3 files changed, 19 insertions(+), 65 deletions(-) diff --git a/framework/main/classes/factories/objects/class_ObjectFactory.php b/framework/main/classes/factories/objects/class_ObjectFactory.php index f06a70a1..1066e47a 100644 --- a/framework/main/classes/factories/objects/class_ObjectFactory.php +++ b/framework/main/classes/factories/objects/class_ObjectFactory.php @@ -55,23 +55,26 @@ class ObjectFactory extends BaseFactory { * @throws InvalidArgumentException If className is empty or the name not following naming-convention */ public static final function createObjectByName ($className, array $args = array()) { - // First get an instance of this factory - $factoryInstance = new ObjectFactory(); - - // Split class name on backslash to check naming-convention - $classNameParts = explode("\\", $className); - // Is the class name valid and is the class there? if (empty($className)) { // Throw an exception here throw new InvalidArgumentException('Parameter "className" is empty'); } elseif (!class_exists($className)) { + // First get an instance of this factory + $factoryInstance = new ObjectFactory(); + // Then throw an exception throw new NoClassException(array($factoryInstance, $className), self::EXCEPTION_CLASS_NOT_FOUND); - } elseif (count($classNameParts) < 3) { + } + + // Split class name on backslash to check naming-convention + $classNameParts = explode("\\", $className); + + // Okay, does it follow naming-convention? + if (count($classNameParts) < 4) { // Namespaces are missing throw new InvalidArgumentException(sprintf('Class name "%s" is not conform to naming-convention: Tld\Domain\Project\Package[\SubPackage...]\SomeFooBar', $className)); - } + } // END - if // Create method name $methodName = sprintf('create%s', self::stripNamespaceFromClassName($className)); @@ -111,16 +114,16 @@ class ObjectFactory extends BaseFactory { * * @param $fullClassName Class name with namespace * @return $shortClassName Stripped class name (no namespace) - * @throws InvalidClassNameException If the class name does not follow naming convention + * @throws InvalidArgumentException 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); + // At least 4 parts should be there + if (count($classNameParts) < 4) { + // Namespace scheme is: Tld\Project\Package[\SubPackage...] + throw new InvalidArgumentException($fullClassName, self::EXCEPTION_INVALID_CLASS_NAME); } // END - if // Get last element diff --git a/framework/main/classes/output/debug/web/class_DebugWebOutput.php b/framework/main/classes/output/debug/web/class_DebugWebOutput.php index 930ff9e6..68dc7ae1 100644 --- a/framework/main/classes/output/debug/web/class_DebugWebOutput.php +++ b/framework/main/classes/output/debug/web/class_DebugWebOutput.php @@ -62,9 +62,9 @@ class DebugWebOutput extends BaseDebugOutput implements Debugger, OutputStreamer * @return void */ public final function outputStream ($output, $stripTags = false) { - // Strip out
+ // Strip out any
$output = str_replace('
', '', $output); - print(stripslashes($output)."
\n"); + printf('' . PHP_EOL, stripslashes($output)); } /** diff --git a/framework/main/exceptions/main/class_InvalidClassNameException.php b/framework/main/exceptions/main/class_InvalidClassNameException.php index 959807d4..76d010ff 100644 --- a/framework/main/exceptions/main/class_InvalidClassNameException.php +++ b/framework/main/exceptions/main/class_InvalidClassNameException.php @@ -1,51 +1,2 @@ - * @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 . - */ -class InvalidClassNameException 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: Tld\Domain\Project\Package[\SubPackage...]\SomeFooBar', - $this->getLine(), - $className - ); - - // Call parent constructor - parent::__construct($message, $code); - } - -} +// [EOF] -- 2.39.2