-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path01-basic-file-scanner.php
More file actions
65 lines (54 loc) · 2.82 KB
/
01-basic-file-scanner.php
File metadata and controls
65 lines (54 loc) · 2.82 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
<?php
declare(strict_types=1);
/**
* Example 01: Basic FileScanner — scan a directory and list all discovered classes.
*
* Demonstrates: FileScanner, ComposerNamespaceResolver, DiscoveryResult
*
* !! PARAMETER REFERENCE (confirmed from implementations):
*
* ComposerNamespaceResolver(composerJsonPath: string, includeDevAutoload: bool):
* - composerJsonPath : path to composer.json
* - includeDevAutoload : include autoload-dev namespaces (default false)
*
* FileScanner(resolver: NamespaceResolver):
* - Token-based parser — does NOT load classes (fast, no side-effects)
* - ⚠️ methods[] and properties[] are NEVER populated (use ReflectionScanner)
*
* $scanner->scan(directories: string[]): DiscoveryResult
* - Returns iterable DiscoveryResult; keys = FQCN, values = ClassMetadata
* - ClassMetadata: filePath, namespace, attributes[], isAbstract, isFinal,
* isReadonly, isInterface, isEnum, isTrait, parent, implements[]
*
* $result->getScanDuration(): float (seconds)
*/
require_once __DIR__ . '/../vendor/autoload.php';
use KaririCode\ClassDiscovery\Scanner\ComposerNamespaceResolver;
use KaririCode\ClassDiscovery\Scanner\FileScanner;
echo "\n";
echo "╔══════════════════════════════════════════════════════════╗\n";
echo "║ Example 01: Basic FileScanner ║\n";
echo "╚══════════════════════════════════════════════════════════╝\n\n";
$resolver = new ComposerNamespaceResolver(
composerJsonPath: __DIR__ . '/../composer.json',
includeDevAutoload: false,
);
$scanner = new FileScanner($resolver);
$result = $scanner->scan([__DIR__ . '/../src']);
echo "📦 Discovered " . count($result) . " class(es) in src/\n\n";
foreach ($result as $fqcn => $metadata) {
echo " ✔ {$fqcn}\n";
echo " Attributes: " . implode(', ', array_keys($metadata->attributes)) . "\n";
echo " File: " . basename($metadata->filePath) . "\n";
echo " Structure: "
. ($metadata->isFinal ? 'final ' : '')
. ($metadata->isAbstract ? 'abstract ' : '')
. ($metadata->isReadonly ? 'readonly ' : '')
. ($metadata->isInterface ? 'interface' : ($metadata->isEnum ? 'enum' : ($metadata->isTrait ? 'trait' : 'class')))
. ($metadata->parent !== null ? " extends {$metadata->parent}" : '')
. "\n";
// NOTE: methods/properties are NEVER populated by FileScanner (token-based parsing).
// Use ReflectionScanner (example 06) to get full method + property metadata.
}
echo "\n ⏱ Scan duration: " . round($result->getScanDuration() * 1000, 2) . "ms\n";
echo "\n ✅ FileScanner: OK\n\n";