3v4l.org

run code in 300+ PHP versions simultaneously
<?php /** * @template T */ class myInvokable { /** @var T */ private $e; /** @param T $e */ public function __construct($e) { $this->e = $e; } /** * @template B * @param callable(T): B $p * @return B */ public function __invoke($p) { return $p($this->e); } } /** * @template T * @psalm-param T $e * @return myInvokable<T> */ function foo($e): callable { return new myInvokable($e); } $_z = foo('foo')(fn (string $a) => strlen($a)); /** @psalm-trace $_z */; var_dump($_z);

preferences:
30.22 ms | 404 KiB | 5 Q