Heim  >  Artikel  >  Backend-Entwicklung  >  Wie gehe ich mit nicht übereinstimmenden Rückgabetypen in PHP 8.1 um?

Wie gehe ich mit nicht übereinstimmenden Rückgabetypen in PHP 8.1 um?

Susan Sarandon
Susan SarandonOriginal
2024-10-31 07:41:01664Durchsuche

How to Handle Return Type Mismatches in PHP 8.1?

Referenz: Der Rückgabetyp von ... sollte entweder mit ... kompatibel sein oder das Attribut #[ReturnTypeWillChange] sollte verwendet werden

Erklärung: Kovarianz des Rückgabetyps und veraltete Funktionalität

PHP 8.1 führt eine Verhaltensänderung für Methodenrückgabetypen ein. In früheren Versionen konnten Sie eine Methode definieren, ohne einen Rückgabetyp anzugeben. Allerdings erfordert PHP 8.1 jetzt standardmäßig Rückgabetypen für Methoden, die deklariert oder von Schnittstellen geerbt werden. Diese Änderung zielt darauf ab, die Typsicherheit zu verbessern und sicherzustellen, dass Rückgabewerte mit Schnittstellenverträgen übereinstimmen.

Wenn ein Rückgabetyp zu einer zuvor untypisierten Methode hinzugefügt wird, prüft PHP 8.1, ob der Typ des Rückgabewerts mit der deklarierten Rückgabe übereinstimmt Typ. Wenn Sie beispielsweise eine Methode in einer Schnittstelle haben, die wie folgt definiert ist:

<code class="php">interface Countable {
    public function count(): int;
}</code>

Und eine Klasse, die Countable implementiert:

<code class="php">class Example implements Countable {
    public function count() {
        return 42;
    }
}</code>

PHP 8.1 löst aufgrund des Rückgabewerts einen Verfallshinweis aus wird nicht explizit als Ganzzahl typisiert, was der Schnittstellendefinition widerspricht.

Lösung: Rückgabetypen angeben oder das Attribut #[ReturnTypeWillChange] verwenden

Um dieses Problem zu beheben, gibt es zwei Hauptoptionen:

  1. Rückgabetypen angeben: Sie können den Rückgabetyp der Methode in der Klassenimplementierung explizit angeben und so sicherstellen, dass er mit der Schnittstellendefinition übereinstimmt. In diesem Fall würden Sie die Zählmethode aktualisieren auf:
<code class="php">class Example implements Countable {
    public function count(): int {
        return 42;
    }
}</code>
  1. Verwendung des Attributs #[ReturnTypeWillChange]: Wenn Sie die Kompatibilität mit älterem PHP aufrechterhalten müssen Versionen haben oder planen, den Rückgabetyp in Zukunft zu ändern, können Sie das Attribut #[ReturnTypeWillChange] verwenden, um den Verfallshinweis vorübergehend zu unterdrücken. Dadurch können Sie die Änderung des Rückgabetyps auf einen späteren Zeitpunkt verschieben. Die Verwendung dieses Attributs ist unten dargestellt:
<code class="php">class Example implements Countable {
    #[\ReturnTypeWillChange]
    public function count() {
        return 42;
    }
}</code>

Es ist wichtig zu beachten, dass PHP 9.0 beabsichtigt, Rückgabetypen zu erzwingen, wodurch die Verwendung von #[ReturnTypeWillChange] unnötig wird. Daher wird empfohlen, Ihren Code schrittweise zu migrieren, um Rückgabetypen explizit anzugeben und die Verwendung des Attributs nach Möglichkeit zu entfernen.

Das obige ist der detaillierte Inhalt vonWie gehe ich mit nicht übereinstimmenden Rückgabetypen in PHP 8.1 um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn