Skip to content

Commit c05b3a5

Browse files
committed
Improve list class constructors
1 parent 2fd3cca commit c05b3a5

File tree

4 files changed

+25
-31
lines changed

4 files changed

+25
-31
lines changed

src/Dictionary.php

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,8 @@ final class Dictionary implements MemberOrderedMap
2020
/** @var array<string, Item|InnerList<int, Item>> */
2121
private array $members = [];
2222

23-
/**
24-
* @param iterable<string, InnerList<int, Item>|Item|DataType> $members
25-
*/
26-
private function __construct(iterable $members = [])
23+
private function __construct()
2724
{
28-
foreach ($members as $key => $member) {
29-
$this->set($key, $member);
30-
}
3125
}
3226

3327
/**
@@ -40,7 +34,12 @@ private function __construct(iterable $members = [])
4034
*/
4135
public static function fromAssociative(iterable $members = []): self
4236
{
43-
return new self($members);
37+
$instance = new self();
38+
foreach ($members as $key => $member) {
39+
$instance->set($key, $member);
40+
}
41+
42+
return $instance;
4443
}
4544

4645
/**

src/InnerList.php

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,10 @@
1717
final class InnerList implements MemberList, ParameterAccess
1818
{
1919
/** @var array<int, Item> */
20-
private array $members;
20+
private array $members = [];
2121

22-
private function __construct(
23-
public readonly Parameters $parameters,
24-
Item ...$members
25-
) {
26-
$this->members = array_values($members);
22+
private function __construct(public readonly Parameters $parameters)
23+
{
2724
}
2825

2926
public static function from(Item|ByteSequence|Token|bool|int|float|string ...$members): self
@@ -37,12 +34,12 @@ public static function from(Item|ByteSequence|Token|bool|int|float|string ...$me
3734
*/
3835
public static function fromList(iterable $members = [], iterable $parameters = []): self
3936
{
40-
$newMembers = [];
37+
$instance = new self(Parameters::fromAssociative($parameters));
4138
foreach ($members as $member) {
42-
$newMembers[] = self::filterMember($member);
39+
$instance->push(self::filterMember($member));
4340
}
4441

45-
return new self(Parameters::fromAssociative($parameters), ...$newMembers);
42+
return $instance;
4643
}
4744

4845
private static function filterMember(StructuredField|ByteSequence|Token|bool|int|float|string $member): Item

src/OrderedList.php

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,10 @@
1919
final class OrderedList implements MemberList
2020
{
2121
/** @var array<int, Item|InnerList<int, Item>> */
22-
private array $members;
22+
private array $members = [];
2323

24-
private function __construct(Item|InnerList ...$members)
24+
private function __construct()
2525
{
26-
$this->members = array_values($members);
2726
}
2827

2928
/**
@@ -41,12 +40,12 @@ public static function from(InnerList|Item|ByteSequence|Token|bool|int|float|str
4140
*/
4241
public static function fromList(iterable $members = []): self
4342
{
44-
$newMembers = [];
43+
$instance = new self();
4544
foreach ($members as $member) {
46-
$newMembers[] = self::filterMember($member);
45+
$instance->push(self::filterMember($member));
4746
}
4847

49-
return new self(...$newMembers);
48+
return $instance;
5049
}
5150

5251
private static function filterMember(StructuredField|ByteSequence|Token|bool|int|float|string $member): InnerList|Item

src/Parameters.php

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,8 @@ final class Parameters implements MemberOrderedMap
2323
/** @var array<string, Item> */
2424
private array $members = [];
2525

26-
/**
27-
* @param iterable<string, Item|DataType> $members
28-
*/
29-
private function __construct(iterable $members = [])
26+
private function __construct()
3027
{
31-
foreach ($members as $key => $value) {
32-
$this->set($key, $value);
33-
}
3428
}
3529

3630
/**
@@ -73,7 +67,12 @@ private static function formatMember(StructuredField|ByteSequence|Token|bool|int
7367
*/
7468
public static function fromAssociative(iterable $members = []): self
7569
{
76-
return new self($members);
70+
$instance = new self();
71+
foreach ($members as $key => $member) {
72+
$instance->set($key, $member);
73+
}
74+
75+
return $instance;
7776
}
7877

7978
/**

0 commit comments

Comments
 (0)