dpanta94 / phpstan-containers
PHPStan extensions for Containers
Installs: 56
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
Type:phpstan-extension
pkg:composer/dpanta94/phpstan-containers
Requires
- php: ^7.4 || ^8.0
- phpstan/phpstan: ^2.0
Requires (Dev)
- php-parallel-lint/php-parallel-lint: ^1.1
- phpstan/phpstan-strict-rules: ^2.0
- phpunit/phpunit: ^9.5 || ^10.0
- psr/container: ^1.0 || ^2.0
- stellarwp/container-contract: ^1.0
README
PHPStan extensions for dependency injection containers. Provides dynamic return type resolution so PHPStan understands that $container->get(Foo::class) returns Foo.
Supported Containers
- StellarWP Container Contract (
StellarWP\ContainerContract\ContainerInterface) - PSR-11 Container (
Psr\Container\ContainerInterface)
Requirements
- PHP 7.4 or higher
- PHPStan 2.0 or higher
Installation
composer require --dev dpanta94/phpstan-containers
If you use phpstan/extension-installer, you're all set!
Manual Installation
If you don't use the extension installer, add the extension to your phpstan.neon:
includes: - vendor/dpanta94/phpstan-containers/extension.neon
Usage
Once installed, PHPStan will automatically understand container return types:
use Psr\Container\ContainerInterface; class MyService { public function __construct(private ContainerInterface $container) {} public function doSomething(): void { // PHPStan knows $logger is an instance of Logger $logger = $this->container->get(Logger::class); $logger->info('Hello world'); // PHPStan knows $mailer is an instance of MailerInterface $mailer = $this->container->get(MailerInterface::class); $mailer->send($message); } }
The extension resolves types when:
- The argument to
get()is a class-string constant (e.g.,Foo::class) - The class or interface exists in the codebase
When using string service IDs (e.g., $container->get('mailer')), the extension falls back to the default mixed return type.
License
MIT
Credits
This package is inspired by Phil Nelson's phpstan-container-extension.