Article
PSR-4 Autoloading During PHP Modernization
Map namespaces to directories correctly, avoid classmap-only traps, and migrate legacy class names toward PSR-4 without breaking production.
PSR-4 maps a namespace prefix to a base directory so App\Billing\Invoice resolves to src/Billing/Invoice.php. It is the default for new PHP code and the target state for modernization—but many legacy classes have no namespace and inconsistent filenames. Classmap is the bridge; PSR-4 is the destination for code you actively own.
{
"autoload": {
"psr-4": {
"App\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"App\\Tests\\": "tests/"
}
}
}
Rules that break in real migrations
- Namespace prefix and directory must agree character-for-character after the base path
- Class name must match the filename (
InvoiceHelper.php) - Falling back to scanning the whole project with classmap forever hides structural debt
- Case-sensitive production filesystems fail when laptops are case-insensitive
Migration tactics
Keep old unnamespaced classes on classmap. Introduce namespaces for new modules under src/. For high-churn classes, create a namespaced wrapper that delegates to the legacy class (strangler), then swap call sites. After composer dump-autoload, prove both web and CLI entry points resolve the symbol.
Use the PSR-4 Checker on suspicious paths and the Composer.json Validator before merging autoload edits. Parent index: Composer modernization.
Related tools
- Composer.json Validator Validate composer.json structure and common mistakes without running composer install.
- Legacy PHP Risk Checker Paste PHP source for a static scan that classifies removed APIs, deprecated calls, and security-sensitive leg…
- PHP Deprecated Checker Find deprecated functions and patterns in pasted PHP to prioritize modernization work.
- PHP Environment Compare Compare two PHP environment summaries to find directive and extension mismatches.
- PHP Modernization Roadmap Build an ordered migration stage list from your PHP version, framework, Composer, database API, and deploymen…
- PHP Version Compatibility Checker Scan pasted PHP for version-sensitive syntax and APIs to plan upgrades across PHP releases.
Related reading
- Composer Modernization Center Add Composer to legacy PHP projects, migrate includes to autoloading, set platform constraints, and replace a…
- PHP 5 to Modern PHP: Complete Incremental Migration Guide A deep, production-minded path from PHP 5.x codebases to supported PHP 8.x: removed extensions, charset, PDO,…
- PHP Security Modernization for Legacy Applications Upgrade inherited PHP security practices: prepared statements, password hashing, sessions, CSRF, XSS escaping…
- PHP 7 to PHP 8 Migration Guide Deep guide to PHP 8.0 breaking changes that matter for PHP 7 applications, with upgrade tactics through suppo…
- Inheriting a Legacy PHP Application A first-30-days playbook for developers handed an unfamiliar PHP codebase: runtime truth, risk triage, and sa…