Ich möchte eine Funktion mit Anmerkungen versehen, die ein Array mit mindestens dem Schlüssel „a“ annimmt und die gleiche Array-Form mit dem neu hinzugefügten Schlüssel „x“ zurückgibt. Ich habe versucht, die Typkreuzung wie folgt zu verwenden:
Code: Select all
/**
* @template T of array{a: string}
* @param T $p
* @return T&array{x: int}
*/
function addXToArray(array $p) {
$p['x'] = strlen($p['a']);
return $p;
}
$result = addXToArray(['a' => 'hello']);
Das ist offensichtlich nicht der richtige Weg, denn PHPstan beschwert sich (auf Ebene 10 mit „PHPDoc-Typen als sicher behandeln“):
Code: Select all
PHPDoc tag @return contains unresolvable type.
Ich verwende Vorlage T, weil ich alle anderen Schlüssel beibehalten muss, die möglicherweise im Argument vorhanden sind.
Wie mache ich das richtig? Funktion mit Anmerkungen versehen?