Skip to content

Conversation

@clue
Copy link
Owner

@clue clue commented Dec 17, 2025

This changeset adds support for Container config with union types (PHP 8.0+) and intersection types (PHP 8.1+) and DNF types (PHP 8.2+). With these changes applied, factory functions may now explicitly use advanced type features introduced in recent PHP versions, which is especially useful for string environment variable resolution:

$container = new FrameworkX\Container([
    AccessLogHandler => fn(bool|string $LOG = true) => new AccessLogHandler($LOG ? null : '/dev/null')
]);

Note that this does not affect default autowiring if no explicit factory function is used. This includes a number of updated tests to verify correct behavior and avoid introducing any potential regressions, so this has 100% code coverage and should be safe to apply. On top of this, I've updated the documentation slightly to emphasize environment variables are always of type string currently. This is the next step in adding better configuration support and support for environment variables and .env (dotenv) files as discussed in #101.

Builds on top of #286, #284, #184, #92, and others

@clue clue added this to the v0.18.0 milestone Dec 17, 2025
@clue clue requested a review from Copilot December 17, 2025 22:59
@clue clue added the new feature New feature or request label Dec 17, 2025
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds support for advanced PHP type features in the Container configuration, specifically union types (PHP 8.0+), intersection types (PHP 8.1+), and DNF (Disjunctive Normal Form) types (PHP 8.2+). This enhancement allows factory functions to use these modern type hints for better type safety and flexibility, particularly useful for environment variable resolution.

Key Changes:

  • Refactored Container::validateType() to recursively handle union, intersection, and DNF types instead of rejecting them
  • Updated error messages to be more descriptive when type mismatches occur
  • Added comprehensive test coverage for all new type features

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 3 comments.

File Description
src/Container.php Removed early abort for union/intersection types; enhanced validateType() to recursively check complex types; updated typeName() to handle non-named types
tests/ContainerTest.php Added new tests for union, intersection, and DNF types; updated existing test names and error message expectations to reflect new behavior
tests/AppTest.php Updated error messages for invalid constructor types to match new error format
docs/best-practices/controllers.md Updated documentation to clarify that environment variables are strings and may require union types or casting

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@clue clue merged commit 235615c into clue:main Dec 18, 2025
68 checks passed
@clue clue deleted the container-union branch December 18, 2025 22:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

new feature New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant