PHPStan PSL extension

March 18, 2026 ยท View on GitHub

Build Latest Stable Version License

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