3 namespace Org\Mxchange\CoreFramework\Factory;
5 // Import framework stuff
6 use Org\Mxchange\CoreFramework\Generic\FrameworkInterface;
7 use Org\Mxchange\CoreFramework\Object\BaseFrameworkSystem;
10 use \InvalidArgumentException;
13 * A general (base) factory
15 * @author Roland Haeder <webmaster@shipsimu.org>
17 * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2023 Core Developer Team
18 * @license GNU GPL 3.0 or any newer version
19 * @link http://www.shipsimu.org
21 * This program is free software: you can redistribute it and/or modify
22 * it under the terms of the GNU General Public License as published by
23 * the Free Software Foundation, either version 3 of the License, or
24 * (at your option) any later version.
26 * This program is distributed in the hope that it will be useful,
27 * but WITHOUT ANY WARRANTY; without even the implied warranty of
28 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
29 * GNU General Public License for more details.
31 * You should have received a copy of the GNU General Public License
32 * along with this program. If not, see <http://www.gnu.org/licenses/>.
34 abstract class BaseFactory extends BaseFrameworkSystem {
36 * Total objects generated
38 private static $total = 0;
41 * Counter of all objects
43 private static $objectCounters = [];
46 * Protected constructor
48 * @param $className Name of the real class (not BaseFactory)
51 protected function __construct (string $className) {
52 // Call parent constructor
53 parent::__construct($className);
59 * @param $fullClassName Name of the class we shall count
61 * @throws InvalidArgumentException If a parameter is not valid
63 protected static final function countObject (string $fullClassName) {
64 // Is the parameter valid?
65 if (empty($fullClassName)) {
66 // No empty class name
67 throw new InvalidArgumentException('fullClassName is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT);
70 // Count it up in total sum
73 // Do we have an entry?
74 if (!self::isClassCounted($fullClassName)) {
75 // No, then generate one
76 self::$objectCounters[$fullClassName] = 0;
80 //* NOISY-DEBUG: */ print __METHOD__.': className=' .$fullClassName . PHP_EOL;
81 self::$objectCounters[$fullClassName]++;
85 * Static getter for total object count
87 * @return $total Total amount of generated objects
89 public static final function getTotal () {
94 * Static getter for all object counters
96 * @return $objectCounters An array with all object counters
98 public static final function getAllCounters () {
99 return self::$objectCounters;
103 * Checks whether given full class name is already counted
105 * @param $fullClassName Full name of class
106 * @return $isCounted Whether given class name is counted
107 * @throws InvalidArgumentException If a parameter is not valid
109 public static final function isClassCounted (string $fullClassName) {
110 // Is the parameter valid?
111 if (empty($fullClassName)) {
112 // No empty class name
113 throw new InvalidArgumentException('fullClassName is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT);
116 // Return isset() result
117 return isset(self::$objectCounters[$fullClassName]);