Vor PHP8 war die Handhabung der polymorphen Funktionsparameter ein relativ komplexes Problem. Da PHP eine dynamisch typisierte Sprache ist, können Funktionsparameter Werte jeglicher Art akzeptieren. Dies bedeutet, dass die Parametertypen der Funktion möglicherweise inkonsistent sein können, was zu einer Menge Typ -Überprüfungs- und Konvertierungsvorgänge führt, die in der Funktion durchgeführt werden müssen, wodurch der Code ausführlich und schwer zu warten ist.
Das Konzept der Gewerkschaftstypen wurde jedoch in PHP8 eingeführt, was uns eine bessere Möglichkeit bietet, mit polymorphen Funktionsparametern umzugehen. Mit Gewerkschaftstypen können wir angeben, dass ein Parameter mehrere verschiedene Wertearten akzeptieren kann, wodurch mehrere Arten von Urteilen innerhalb der Funktion vermieden werden.
Das Folgende ist ein spezifisches Codebeispiel, um dieses Konzept zu veranschaulichen.
Angenommen, wir haben eine Funktion calcarea, mit der die Bereiche verschiedener Formen berechnet werden. Vor Php8 können wir den folgenden Code schreiben:
function calcArea($shape, $params) {
switch ($shape) {
case 'rectangle':
$width = $params['width'];
$height = $params['height'];
return $width * $height;
case 'circle':
$radius = $params['radius'];
return 3.14 * $radius * $radius;
case 'triangle':
$base = $params['base'];
$height = $params['height'];
return 0.5 * $base * $height;
}
}
In diesem Beispiel berechnen wir den Bereich, indem wir verschiedene Formparameter übergeben. Da die Parametertypen einer Funktion dynamisch sind, müssen wir Switch -Anweisungen innerhalb der Funktion verwenden, um verschiedene Berechnungen gemäß den Formparametern durchzuführen.
In PHP8 können wir Gewerkschaftstypen verwenden, um diesen Code zu verbessern. Wir können angeben, dass der Typ des Parameters von $ form "Rechteck" | "Kreis" | "Dreieck" ist und den Typ des Parameters $ Parameter als assoziatives Array definieren. Auf diese Weise können wir Switch -Anweisungen innerhalb der Funktion weglassen und die Methoden und Eigenschaften der Parameter direkt verwenden.
function calcArea(string $shape, array $params) {
if ($shape === 'rectangle') {
$width = $params['width'];
$height = $params['height'];
return $width * $height;
} elseif ($shape === 'circle') {
$radius = $params['radius'];
return 3.14 * $radius * $radius;
} elseif ($shape === 'triangle') {
$base = $params['base'];
$height = $params['height'];
return 0.5 * $base * $height;
}
}
In dieser neuen Implementierung müssen wir der Parameterliste der Funktion nur Anmerkungen der Funktion hinzufügen, um auf die Parameter und Methoden direkt in der Funktion zuzugreifen, ohne zusätzliche Typprüfungen und Konvertierungsvorgänge durchzuführen. Dies macht den Code prägnanter und leicht zu verstehen.
Zusammenfassend bietet uns die Gewerkschaftstypen von PHP8 eine bessere Möglichkeit, mit polymorphen Funktionsparametern umzugehen. Durch Angeben mehrerer Typen in der Liste der Funktionsparameter können wir direkt auf die Eigenschaften und Methoden der Parameter in der Funktion zugreifen, wodurch ein schwerwiegender Typ -Überprüfungs- und -konvertierungsvorgang vermieden wird. Dies kann den Code prägnanter, lesbarer machen und die Komplexität des Codes effektiver verringern.