Skip to content

Commit 68f4fa2

Browse files
committed
TASK: Turn all Domain\* name objects into flyweights
1 parent b2c75cb commit 68f4fa2

File tree

18 files changed

+305
-9
lines changed

18 files changed

+305
-9
lines changed

src/Domain/AttributeName/AttributeName.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,18 @@
2424

2525
final class AttributeName
2626
{
27+
/**
28+
* @var array<string,self>
29+
*/
30+
private static array $instances = [];
31+
2732
private function __construct(
2833
public readonly string $value
2934
) {
3035
}
3136

3237
public static function from(string $string): self
3338
{
34-
return new self($string);
39+
return self::$instances[$string] ??= new self($string);
3540
}
3641
}

src/Domain/ComponentName/ComponentName.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,19 @@
2626

2727
final class ComponentName
2828
{
29+
/**
30+
* @var array<string,self>
31+
*/
32+
private static array $instances = [];
33+
2934
private function __construct(
3035
public readonly string $value
3136
) {
3237
}
3338

3439
public static function from(string $string): self
3540
{
36-
return new self($string);
41+
return self::$instances[$string] ??= new self($string);
3742
}
3843

3944
public function toTypeName(): TypeName

src/Domain/EnumMemberName/EnumMemberName.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,18 @@
2424

2525
final class EnumMemberName
2626
{
27+
/**
28+
* @var array<string,self>
29+
*/
30+
private static array $instances = [];
31+
2732
private function __construct(
2833
public readonly string $value
2934
) {
3035
}
3136

3237
public static function from(string $string): self
3338
{
34-
return new self($string);
39+
return self::$instances[$string] ??= new self($string);
3540
}
3641
}

src/Domain/EnumName/EnumName.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,19 @@
2626

2727
final class EnumName
2828
{
29+
/**
30+
* @var array<string,self>
31+
*/
32+
private static array $instances = [];
33+
2934
private function __construct(
3035
public readonly string $value
3136
) {
3237
}
3338

3439
public static function from(string $string): self
3540
{
36-
return new self($string);
41+
return self::$instances[$string] ??= new self($string);
3742
}
3843

3944
public function toTypeName(): TypeName

src/Domain/PropertyName/PropertyName.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,19 @@
2626

2727
final class PropertyName
2828
{
29+
/**
30+
* @var array<string,self>
31+
*/
32+
private static array $instances = [];
33+
2934
private function __construct(
3035
public readonly string $value
3136
) {
3237
}
3338

3439
public static function from(string $string): self
3540
{
36-
return new self($string);
41+
return self::$instances[$string] ??= new self($string);
3742
}
3843

3944
public function toEnumMemberName(): EnumMemberName

src/Domain/StructName/StructName.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,19 @@
2626

2727
final class StructName
2828
{
29+
/**
30+
* @var array<string,self>
31+
*/
32+
private static array $instances = [];
33+
2934
private function __construct(
3035
public readonly string $value
3136
) {
3237
}
3338

3439
public static function from(string $string): self
3540
{
36-
return new self($string);
41+
return self::$instances[$string] ??= new self($string);
3742
}
3843

3944
public function toTypeName(): TypeName

src/Domain/TagName/TagName.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,18 @@
2424

2525
final class TagName
2626
{
27+
/**
28+
* @var array<string,self>
29+
*/
30+
private static array $instances = [];
31+
2732
private function __construct(
2833
public readonly string $value
2934
) {
3035
}
3136

3237
public static function from(string $string): self
3338
{
34-
return new self($string);
39+
return self::$instances[$string] ??= new self($string);
3540
}
3641
}

src/Domain/TypeName/TypeName.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,19 @@
2626

2727
final class TypeName
2828
{
29+
/**
30+
* @var array<string,self>
31+
*/
32+
private static array $instances = [];
33+
2934
private function __construct(
3035
public readonly string $value
3136
) {
3237
}
3338

3439
public static function from(string $string): self
3540
{
36-
return new self($string);
41+
return self::$instances[$string] ??= new self($string);
3742
}
3843

3944
public function toVariableName(): VariableName

src/Domain/VariableName/VariableName.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,18 @@
2424

2525
final class VariableName
2626
{
27+
/**
28+
* @var array<string,self>
29+
*/
30+
private static array $instances = [];
31+
2732
private function __construct(
2833
public readonly string $value
2934
) {
3035
}
3136

3237
public static function from(string $string): self
3338
{
34-
return new self($string);
39+
return self::$instances[$string] ??= new self($string);
3540
}
3641
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<?php
2+
3+
/**
4+
* PackageFactory.ComponentEngine - Universal View Components for PHP
5+
* Copyright (C) 2023 Contributors of PackageFactory.ComponentEngine
6+
*
7+
* This program is free software: you can redistribute it and/or modify
8+
* it under the terms of the GNU General Public License as published by
9+
* the Free Software Foundation, either version 3 of the License, or
10+
* (at your option) any later version.
11+
*
12+
* This program is distributed in the hope that it will be useful,
13+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15+
* GNU General Public License for more details.
16+
*
17+
* You should have received a copy of the GNU General Public License
18+
* along with this program. If not, see <https://www.gnu.org/licenses/>.
19+
*/
20+
21+
declare(strict_types=1);
22+
23+
namespace PackageFactory\ComponentEngine\Test\Unit\Domain\AttributeName;
24+
25+
use PackageFactory\ComponentEngine\Domain\AttributeName\AttributeName;
26+
use PHPUnit\Framework\TestCase;
27+
28+
final class AttributeNameTest extends TestCase
29+
{
30+
/**
31+
* @test
32+
*/
33+
public function isFlyweight(): void
34+
{
35+
$this->assertSame(AttributeName::from('foo'), AttributeName::from('foo'));
36+
$this->assertSame(AttributeName::from('bar'), AttributeName::from('bar'));
37+
$this->assertSame(AttributeName::from('data-baz'), AttributeName::from('data-baz'));
38+
39+
$this->assertNotSame(AttributeName::from('foo'), AttributeName::from('bar'));
40+
}
41+
}

0 commit comments

Comments
 (0)