Psalm
Get started
Documentation
Paid support
Plugins
Blog
GitHub
<?php /** * @template T1 * @template T2 */ final class App { /** * @param T1 $param1 * @param T2 $param2 */ public function __construct( private readonly mixed $param1, private readonly mixed $param2, ) {} /** * @template T3 * @param callable(T1, T2): T3 $callback * @return T3 */ public function run(callable $callback): mixed { return $callback($this->param1, $this->param2); } } /** * @template P1 * @template P2 * @param P1 $param1 * @param P2 $param2 * @return array{param1: P1, param2: P2} */ function appHandler(mixed $param1, mixed $param2): array { return ['param1' => $param1, 'param2' => $param2]; } $app = new App(param1: 42, param2: 'test'); $result = $app->run(appHandler(...)); /** @psalm-check-type-exact $result = array{param1: 42, param2: 'test'} */
Snippet created on March 26 2023 at 18:46 UTC
Settings
Get link