PHPStan PSL extension
March 18, 2026 ยท View on GitHub
Description
The main goal of this extension is to help PHPStan to detect the types after using Psl\Type\shape.
Given the following example:
use Psl\Type;
$specification = Type\shape([
'name' => Type\string(),
'age' => Type\int(),
'location' => Type\optional(Type\shape([
'city' => Type\string(),
'state' => Type\string(),
'country' => Type\string(),
]))
]);
$input = $specification->coerce($_GET['user']);
PHPStan assumes that $input is of type array<"age"|"location"|"name", array<"city"|"country"|"state", string>|int|string>.
If we enable the extension, you will get a more specific and correct type of array{name: string, age: int, location?: array{city: string, state: string, country: string}}.
Besides coerce, this extension also supports matches() and assert() methods.
Installation
To use this extension, require it in Composer:
composer require --dev php-standard-library/phpstan-extension
If you also install phpstan/extension-installer then you're all set!
Manual installation
If you don't want to use phpstan/extension-installer, include extension.neon in your project's PHPStan config:
includes:
- vendor/php-standard-library/phpstan-extension/extension.neon