ILIAS  trunk Revision v11.0_alpha-1715-g7fc467680fb
All Data Structures Namespaces Files Functions Variables Enumerations Enumerator Modules Pages
SingletonTrait.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 namespace ILIAS\GlobalScreen;
21 
22 use ReflectionClass;
23 
28 trait SingletonTrait
29 {
30  private static array $services = [];
31 
32  private function get(string $class_name): object
33  {
34  if (!$this->has($class_name)) {
35  self::$services[$class_name] = new $class_name();
36  }
37 
38  return self::$services[$class_name];
39  }
40 
41  private function getWithArgument(string $class_name, $argument): object
42  {
43  if (!$this->has($class_name)) {
44  self::$services[$class_name] = new $class_name($argument);
45  }
46 
47  return self::$services[$class_name];
48  }
49 
50  private function getWithMultipleArguments(string $class_name, array $arguments): object
51  {
52  if (!$this->has($class_name)) {
53  $i = new ReflectionClass($class_name);
54 
55  self::$services[$class_name] = $i->newInstanceArgs($arguments);
56  }
57 
58  return self::$services[$class_name];
59  }
60 
61  private function has(string $class_name): bool
62  {
63  return isset(self::$services[$class_name]);
64  }
65 }
getWithMultipleArguments(string $class_name, array $arguments)
PhpIncompatibleReturnTypeInspection
has(string $class_name)
getWithArgument(string $class_name, $argument)