getPathAsString() . "\n"; echo " Dynamic: " . ($stringRoute->getRoutePath()->isDynamic() ? 'Yes' : 'No') . "\n"; echo " Parameters: " . implode(', ', $stringRoute->getRoutePath()->getParameterNames()) . "\n\n"; // Test 2: Value Object route - your original example echo "2. Value Object route (your example):\n"; $routePath = RoutePath::fromElements('images', Placeholder::fromString('filename')); $valueObjectRoute = new Route(path: $routePath, method: Method::GET); echo " Path: " . $valueObjectRoute->getPathAsString() . "\n"; echo " Dynamic: " . ($valueObjectRoute->getRoutePath()->isDynamic() ? 'Yes' : 'No') . "\n"; echo " Parameters: " . implode(', ', $valueObjectRoute->getRoutePath()->getParameterNames()) . "\n\n"; // Test 3: Complex Value Object route echo "3. Complex Value Object route:\n"; $complexPath = RoutePath::fromElements( 'api', 'users', Placeholder::typed('userId', 'uuid'), 'posts', Placeholder::typed('postId', 'int') ); $complexRoute = new Route(path: $complexPath, method: Method::POST); echo " Path: " . $complexRoute->getPathAsString() . "\n"; echo " Parameters: " . implode(', ', $complexRoute->getRoutePath()->getParameterNames()) . "\n\n"; // Test 4: Fluent builder echo "4. Fluent builder approach:\n"; $fluentPath = RoutePath::create() ->segment('api') ->segment('files') ->typedParameter('filename', 'filename') ->build(); $fluentRoute = new Route(path: $fluentPath); echo " Path: " . $fluentRoute->getPathAsString() . "\n"; // Test 5: Wildcard echo "\n5. Wildcard route:\n"; $wildcardPath = RoutePath::fromElements('files', Placeholder::wildcard('path')); $wildcardRoute = new Route(path: $wildcardPath); echo " Path: " . $wildcardRoute->getPathAsString() . "\n"; echo " Regex: " . $wildcardRoute->getRoutePath()->toRegex() . "\n"; // Test 6: Compatibility check echo "\n6. Compatibility check:\n"; $stringRoute2 = new Route(path: '/api/users/{id}'); $objectRoute2 = new Route(path: RoutePath::fromElements('api', 'users', Placeholder::fromString('id'))); echo " String and object routes are equivalent: " . ($stringRoute2->getPathAsString() === $objectRoute2->getPathAsString() ? 'Yes' : 'No') . "\n"; echo "\n=== All tests completed successfully! ===\n";