andrew-gos/class-builder
PHP library to construct objects from arrays or scalars using constructor reflection. Supports interfaces/abstracts via AvailableInheritors, conditional building with BuildIf checkers, typed arrays, variadics, and union/intersection parameter types.
Pros:
ArrayType), which is valuable for domain-driven design (DDD) or API response mapping.instanceof checks, improving maintainability.Cons:
new calls in controllers/services, but service container binding may need adjustments (e.g., bindWhen for dynamic instantiation).Model::hydrate()), but not natively supported.ClassBuilder::getInstance()->build()) to reduce overhead.try-catch with manual instantiation) for unsupported cases.App\Factories\)?collect($request->all())->mapInto(Model::class))?make() for simple cases?spatie/fractal, league/arrayobjects)?Validator::make()->validate() + manual instantiation with ClassBuilder::build(Request::class, $data).ClassBuilder::build(ApiResource::class, $json)).bus->dispatch(ClassBuilder::build(CreateUserCommand::class, $input))).new calls in controllers with ClassBuilder::build().new User($request->input()) → ClassBuilder::build(User::class, $request->all())).@AvailableInheritors, @ArrayType) for complex types.config('app.use_class_builder')) to toggle between old/new patterns.HttpFoundation) or popular packages (e.g., spatie/laravel-activitylog).make(), ensure no duplicate instantiation logic.andrew-gos/class-builder to composer.json.app(ClassBuilder::class)) for consistency.ClassBuilder to the container.@ArrayType, @BuildIf).ClassBuilderException).ClassBuilder::build() execution time).new calls mean less manual instantiation logic.@BuildIf attributes replace scattered if checks.@Field, @ArrayType may make classes harder to read.User due to invalid email type").Illuminate\Http\Request).Gostev71@outlook.com) may be slow.static $reflectionCache).build() call loads class metadata; reuse ClassBuilder instances.@ArrayType) may increase memory usage for big datasets.| Scenario | Impact | Mitigation |
|---|---|---|
| Invalid input data | Silent failures or exceptions | Use try-catch with fallback logic |
| Unsupported types | Build fails | Extend CheckerInterface |
| Reflection errors | Crashes | Cache reflection data |
| Attribute misconfiguration | Logic errors | Static analysis (e.g., PHPStan) |
| Author abandonment | Unpatched bugs | Fork and maintain |
@Field, @ArrayType) via examples.How can I help you explore Laravel packages today?