Skip to content

Commit abbe181

Browse files
authored
add WeakMapExporter (#4)
1 parent 01b1091 commit abbe181

File tree

3 files changed

+57
-0
lines changed

3 files changed

+57
-0
lines changed
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php declare(strict_types = 1);
2+
3+
namespace ShipMonk\MemoryScanner\InternalObjectExporter;
4+
5+
use ShipMonk\MemoryScanner\InternalObjectExporter;
6+
use WeakMap;
7+
8+
/**
9+
* @implements InternalObjectExporter<WeakMap<object, mixed>>
10+
*/
11+
final class WeakMapExporter implements InternalObjectExporter
12+
{
13+
14+
public function getClassName(): string
15+
{
16+
return WeakMap::class;
17+
}
18+
19+
public function getProperties(object $object): array
20+
{
21+
$values = [];
22+
23+
foreach ($object as $value) {
24+
$values[] = $value;
25+
}
26+
27+
return [
28+
'values' => $values,
29+
];
30+
}
31+
32+
}

src/MemoryScanner.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use ShipMonk\MemoryScanner\InternalObjectExporter\ReflectionFiberExporter;
99
use ShipMonk\MemoryScanner\InternalObjectExporter\ReflectionFunctionExporter;
1010
use ShipMonk\MemoryScanner\InternalObjectExporter\ReflectionGeneratorExporter;
11+
use ShipMonk\MemoryScanner\InternalObjectExporter\WeakMapExporter;
1112
use ShipMonk\MemoryScanner\MemoryRootsProvider\AutoloadMemoryRootsProvider;
1213
use ShipMonk\MemoryScanner\MemoryRootsProvider\ClassLikeMemoryRootsProvider;
1314
use ShipMonk\MemoryScanner\MemoryRootsProvider\ConstantMemoryRootsProvider;
@@ -74,6 +75,7 @@ public static function create(): self
7475
$memoryScanner->registerInternalObjectExporter(new ReflectionFiberExporter());
7576
$memoryScanner->registerInternalObjectExporter(new ReflectionFunctionExporter());
7677
$memoryScanner->registerInternalObjectExporter(new ReflectionGeneratorExporter());
78+
$memoryScanner->registerInternalObjectExporter(new WeakMapExporter());
7779

7880
return $memoryScanner;
7981
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php declare(strict_types = 1);
2+
3+
namespace ShipMonkTests\MemoryScanner\InternalObjectExporter;
4+
5+
use ShipMonk\MemoryScanner\InternalObjectExporter\WeakMapExporter;
6+
use ShipMonkTests\MemoryScanner\MemoryScannerTestCase;
7+
use stdClass;
8+
use WeakMap;
9+
10+
class WeakMapExporterTest extends MemoryScannerTestCase
11+
{
12+
13+
public function testGetProperties(): void
14+
{
15+
$object = new stdClass();
16+
$weakMap = new WeakMap();
17+
$weakMap[$object] = 1;
18+
19+
$exporter = new WeakMapExporter();
20+
self::assertSame(['values' => [1]], $exporter->getProperties($weakMap));
21+
}
22+
23+
}

0 commit comments

Comments
 (0)