Laminas Code

Extensions to the PHP Reflection API, static code scanning, and fluent code generation

Library
Composer
v4.17.0
1,904stars
BSD 3-Clause License

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum.How we score it →
63/100Good
Development Activity56
Maintenance40
Community56
Maturity60
Momentum40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation.How we score it →
70/100Good
Architecture76
Code Quality78
Innovation65
Learning Curve60

Laminas Code extends PHP’s built-in Reflection API with richer introspection capabilities and adds a static code scanner that can analyze PHP source files without loading/executing them — useful for tooling that must inspect code safely. Its Generator component provides a fluent, object-oriented API for programmatically building PHP classes, interfaces, traits, enums, and methods, then rendering them back to valid source code.

The library underpins code-generation and static-analysis tooling across the PHP ecosystem, historically powering parts of the Zend Framework/Laminas MVC stack (service factories, proxy generation) and remaining a common dependency for tools that need to read or emit PHP source programmatically, such as ORM proxy generators and scaffolding CLIs.

What You Get

  • Extended Reflection classes (ClassReflection, MethodReflection, ParameterReflection) with additional metadata beyond core PHP reflection
  • A static code scanner (Scanner) that reads PHP source files without include/eval, useful for analyzing untrusted or unloaded code
  • A fluent Generator API (ClassGenerator, MethodGenerator, PropertyGenerator) for building and rendering PHP source files
  • Support for generating interfaces, traits, enums, and PHP 8 attributes
  • A DeclareStatement helper for managing declare(strict_types=1) and similar file-level declarations

Common Use Cases

  • Generating proxy classes or mocks for ORMs and dependency-injection containers
  • Building scaffolding/code-generation CLIs that emit PHP classes from templates or schemas
  • Static analysis tools that need to inspect class structure without executing the code
  • Framework tooling that generates service factories or configuration classes

Under The Hood

Architecture The library is split into two independent but complementary subsystems under src/: Reflection, which decorates PHP’s native reflection classes with additional metadata extraction (docblocks, declared types), and Scanner, which parses PHP files into an object model without executing them. The Generator component sits on top of these, providing generator classes that mirror the PHP language’s own constructs (ClassGenerator, MethodGenerator, PropertyGenerator, ParameterGenerator) and render themselves into valid source text via a generate() method, letting callers construct code the same way they would construct any other object graph.

Tech Stack Pure PHP 8.2-8.5 library with no runtime dependencies beyond core PHP; optional integration with doctrine/annotations for annotation-based reflection and laminas/laminas-stdlib. Uses PHPUnit for testing, Psalm for static analysis (with a shepherd-tracked baseline), and laminas/laminas-coding-standard (PHPCS) for style enforcement, plus MkDocs for documentation.

Code Quality 128 test files under test/ mirror the src/ structure, and the project enforces Psalm static analysis with a tracked baseline plus PHPCS via laminas/laminas-coding-standard, indicating disciplined quality gates typical of Laminas-maintained components.

API Design The Generator API mirrors PHP language constructs directly (ClassGenerator, MethodGenerator, PropertyGenerator), making it intuitive for PHP developers, and documentation is published via MkDocs at docs.laminas.dev; the reflection/scanner split does require understanding which subsystem to reach for.

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers

Search