by Guest » 20 Jan 2025, 18:28
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?
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]/**
* @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']);
[/code]
Das ist offensichtlich nicht der richtige Weg, denn PHPstan beschwert sich (auf Ebene 10 mit „PHPDoc-Typen als sicher behandeln“):
[code]PHPDoc tag @return contains unresolvable type.
[/code]
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?