Psalm
Get started
Documentation
Paid support
Plugins
Blog
GitHub
<?php /** @template T of array<array-key, mixed> */ interface Processor { /** * @param T $data * @return T */ public function process(array $data): array; } /** @implements Processor<array{string, list<int>}> */ class QueryProcessor implements Processor { public function process(array $data): array { [$query, $parameters] = $data; return [$query, $parameters]; } } /** @implements Processor<list<string>> */ class OutputProcessor implements Processor { public function process(array $data): array { return $data; } } $query = new QueryProcessor(); $query->process(['query', [1,2,3]]); $query->process([1,2,3]); // flagged (as expected) $data = new OutputProcessor(); $data->process(['abc']); $data->process(['query', [1,2,3]]); // flagged (as expected)
Snippet created on August 17 2023 at 18:08 UTC
Settings
Get link