PHPStan extensions for dependency injection containers. Provides dynamic return type resolution so PHPStan understands that $container->get(Foo::class) returns Foo.
- StellarWP Container Contract (
StellarWP\ContainerContract\ContainerInterface) - PSR-11 Container (
Psr\Container\ContainerInterface)
- PHP 7.4 or higher
- PHPStan 2.0 or higher
composer require --dev dpanta94/phpstan-containersIf you use phpstan/extension-installer, you're all set!
If you don't use the extension installer, add the extension to your phpstan.neon:
includes:
- vendor/dpanta94/phpstan-containers/extension.neonOnce 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.
MIT
This package is inspired by Phil Nelson's phpstan-container-extension.