-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path13-psr11-integration.php
More file actions
112 lines (96 loc) · 5.77 KB
/
13-psr11-integration.php
File metadata and controls
112 lines (96 loc) · 5.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
<?php
declare(strict_types=1);
/**
* Example 13: PSR11Integration + ConfiguratorBridge.
*
* Demonstrates integration helpers designed for framework/container use:
* - PSR11Integration::createDefaultScanner() — ready-to-use Scanner factory
* - PSR11Integration::createAttributeScanner() — AttributeScanner factory
* - PSR11Integration::createReflectionScanner() — ReflectionScanner factory
* - PSR11Integration::createCircularDetector() — CircularDetector factory
* - ConfiguratorBridge::createScanner() — build scanner from config array
* - ConfiguratorBridge::createCacheStrategy() — build ChainCacheStrategy from config
*
* !! PARAMETER REFERENCE (confirmed from implementations):
*
* PSR11Integration (static factory methods):
* ::createDefaultScanner(config: array): FileScanner — with optional cache
* ::createAttributeScanner(config: array): AttributeScanner — production-ready
* ::createReflectionScanner(config: array): ReflectionScanner — full metadata
* ::createCircularDetector(config: array): CircularDetector
*
* ConfiguratorBridge (static factory from config array):
* ::createScanner(config['scanner']): Scanner
* config keys: type (file|reflection|attribute), dirs, exclude, maxDepth
* ::createCacheStrategy(config['cache']): CacheStrategy
* config keys: driver (file|memory|chain), path, ttl, version
*/
require_once __DIR__ . '/../vendor/autoload.php';
use KaririCode\ClassDiscovery\Cache\ChainCacheStrategy;
use KaririCode\ClassDiscovery\Contract\Scanner;
use KaririCode\ClassDiscovery\Integration\ConfiguratorBridge;
use KaririCode\ClassDiscovery\Integration\PSR11Integration;
echo "\n";
echo "╔══════════════════════════════════════════════════════════╗\n";
echo "║ Example 13: PSR11Integration + ConfiguratorBridge ║\n";
echo "╚══════════════════════════════════════════════════════════╝\n\n";
$src = [__DIR__ . '/../src'];
// ── PSR11Integration::createDefaultScanner ──────────────────────
echo "── PSR11Integration::createDefaultScanner() ───────────────\n";
$scanner = PSR11Integration::createDefaultScanner();
echo " Scanner class: " . $scanner::class . "\n";
$result = $scanner->scan($src);
echo " Discovered: " . count($result) . " class(es)\n";
// ── PSR11Integration::createAttributeScanner ────────────────────
echo "\n── PSR11Integration::createAttributeScanner() ─────────────\n";
$attrScanner = PSR11Integration::createAttributeScanner();
echo " Scanner class: " . $attrScanner::class . "\n";
$attrResult = $attrScanner->scan($src);
echo " Discovered: " . count($attrResult) . " class(es)\n";
// ── PSR11Integration::createReflectionScanner ───────────────────
echo "\n── PSR11Integration::createReflectionScanner() ────────────\n";
$refScanner = PSR11Integration::createReflectionScanner();
echo " Scanner class: " . $refScanner::class . "\n";
$refResult = $refScanner->scan($src);
echo " Discovered: " . count($refResult) . " class(es) (with full reflection metadata)\n";
// ── PSR11Integration::createCircularDetector ────────────────────
echo "\n── PSR11Integration::createCircularDetector() ─────────────\n";
$detector = PSR11Integration::createCircularDetector(throwOnDetection: false);
$cycles = $detector->check($refResult);
echo " Circular dependencies detected: " . count($cycles) . "\n";
// ── ConfiguratorBridge::createScanner (array config) ────────────
echo "\n── ConfiguratorBridge::createScanner(config array) ────────\n";
$cacheDir = sys_get_temp_dir() . '/kariricode-configurator-bridge-cache';
$config = [
'composer_json' => __DIR__ . '/../composer.json',
'include_dev' => false,
'max_file_size' => 5 * 1024 * 1024, // 5MB
'max_files' => 5000,
'cache' => [
'enabled' => true,
'dir' => $cacheDir,
],
];
$configuredScanner = ConfiguratorBridge::createScanner($config);
echo " Scanner class: " . $configuredScanner::class . "\n";
$configuredResult = $configuredScanner->scan($src);
echo " Discovered: " . count($configuredResult) . " class(es)\n";
// ── ConfiguratorBridge::createCacheStrategy ─────────────────────
echo "\n── ConfiguratorBridge::createCacheStrategy(config) ────────\n";
$cacheStrategy = ConfiguratorBridge::createCacheStrategy(['dir' => $cacheDir]);
echo " Strategy class: " . $cacheStrategy::class . "\n";
$isChain = $cacheStrategy instanceof ChainCacheStrategy;
echo " Is ChainCacheStrategy (Memory+File): " . ($isChain ? 'YES' : 'NO') . "\n";
// ── ConfiguratorBridge with cache disabled ───────────────────────
echo "\n── ConfiguratorBridge::createScanner(cache disabled) ──────\n";
$configNocache = ['composer_json' => __DIR__ . '/../composer.json', 'cache' => ['enabled' => false]];
$noCacheScanner = ConfiguratorBridge::createScanner($configNocache);
$noCacheResult = $noCacheScanner->scan($src);
echo " Scanner class: " . $noCacheScanner::class . "\n";
echo " Discovered: " . count($noCacheResult) . " class(es) (no cache)\n";
// Cleanup
if (is_dir($cacheDir)) {
array_map('unlink', glob("{$cacheDir}/*.php") ?: []);
@rmdir($cacheDir);
}
echo "\n ✅ PSR11Integration + ConfiguratorBridge: OK\n\n";