key-of<T>型
配列
code:php
/**
* @param key-of<array{a:1,b:2}> $a1
* @param value-of<array{a:1,b:2}> $a2
*/
function f($a1, $a2): void
{
PHPStan\dumpType($a1); // Dumped type: 'a'|'b'
PHPStan\dumpType($a2); // Dumped type: 1|2
}
サンプルコード
code:php
<?php declare(strict_types = 1);
class Prog
{
const LANGS = [
'cpp' => 'C++',
'js' => 'JavaScript',
'php' => 'PHP',
'py' => 'Python',
'rb' => 'Ruby',
];
/**
* @param value-of<self::LANGS> $name
*/
public function __construct(private string $name) {}
/**
* @param key-of<self::LANGS> $extension
*/
public static function byExt(string $extension): self
{
}
public function __toString()
{
return $this->name;
}
}
$o1 = new Prog('C');
$o2 = Prog::byExt('cxx');