Skip to content

Commit 48e0bea

Browse files
authored
Merge pull request #8600 from kenjis/feat-Factories-get-v2
perf: add Factories::get() v2
2 parents 87db593 + 48294a8 commit 48e0bea

File tree

3 files changed

+41
-2
lines changed

3 files changed

+41
-2
lines changed

system/Common.php

+4
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,10 @@ function command(string $command)
214214
*/
215215
function config(string $name, bool $getShared = true)
216216
{
217+
if ($getShared) {
218+
return Factories::get('config', $name);
219+
}
220+
217221
return Factories::config($name, ['getShared' => $getShared]);
218222
}
219223
}

system/Config/Factories.php

+16-2
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,8 @@ public static function __callStatic(string $component, array $arguments)
141141
$options = array_merge(self::getOptions($component), $options);
142142

143143
if (! $options['getShared']) {
144-
if (isset(self::$aliases[$component][$alias])) {
145-
$class = self::$aliases[$component][$alias];
144+
if (isset(self::$aliases[$options['component']][$alias])) {
145+
$class = self::$aliases[$options['component']][$alias];
146146

147147
return new $class(...$arguments);
148148
}
@@ -173,6 +173,20 @@ public static function __callStatic(string $component, array $arguments)
173173
return self::$instances[$options['component']][$class];
174174
}
175175

176+
/**
177+
* Simple method to get the shared instance fast.
178+
*/
179+
public static function get(string $component, string $alias): ?object
180+
{
181+
if (isset(self::$aliases[$component][$alias])) {
182+
$class = self::$aliases[$component][$alias];
183+
184+
return self::$instances[$component][$class];
185+
}
186+
187+
return self::__callStatic($component, [$alias]);
188+
}
189+
176190
/**
177191
* Gets the defined instance. If not exists, creates new one.
178192
*

tests/system/Config/FactoriesTest.php

+21
Original file line numberDiff line numberDiff line change
@@ -465,4 +465,25 @@ public function testIsUpdated(array $data)
465465

466466
$this->assertFalse(Factories::isUpdated('config'));
467467
}
468+
469+
public function testGetReturnsFactoriesConfigInstance()
470+
{
471+
$config = Factories::config('App');
472+
473+
$this->assertSame($config, Factories::get('config', 'App'));
474+
}
475+
476+
public function testGetCreatesConfigInstanceAndFactoriesConfigReturnsIt()
477+
{
478+
$config = Factories::get('config', 'App');
479+
480+
$this->assertSame($config, Factories::config('App'));
481+
}
482+
483+
public function testGetNonexistentClass()
484+
{
485+
$config = Factories::get('config', 'NonexistentClass');
486+
487+
$this->assertNull($config);
488+
}
468489
}

0 commit comments

Comments
 (0)