Heim >Backend-Entwicklung >PHP-Tutorial >Detaillierte Erläuterung der neuen Funktionen für Skalar-, Operator- und Rückgabewerttypen in PHP7
1. ??-Operator (NULL-Koaleszenzoperator)
$a = $_GET['a'] ?? 1;
Es ist äquivalent zu:
$a = empty($_GET['a']) ? 1 : $_GET['a'];
Wir wissen, dass ternärer The Der -Operator kann wie folgt verwendet werden:
$a ?: 1
Dies basiert jedoch auf der Voraussetzung, dass $a definiert wurde. Der neue ??-Operator kann die Beurteilung vereinfachen. Der Code ist vereinfacht und gleichzeitig intuitiver!
Beispiel aus der offiziellen Dokumentation (beachten Sie, dass die Seitenlängenparametersyntax von ...
nur in PHP 5.6 oder höher verfügbar ist):
<?php function arraysSum(array ...$arrays): array { return array_map(function(array $array): int { return array_sum($array); }, $arrays); } print_r(arraysSum([1,2,3], [4,5,6], [7,8,9]));
Aus diesem Beispiel können Sie ersehen, dass jetzt Funktionen (einschließlich anonyme Funktionen) den Typ des Rückgabewerts angeben können.
Diese Funktion kann uns helfen, einige Probleme zu vermeiden, die durch die implizite Typkonvertierung von PHP verursacht werden. Wenn Sie über die erwarteten Ergebnisse nachdenken, bevor Sie eine Funktion definieren , können Sie unnötige Fehler vermeiden.
Allerdings gibt es auch hier eine Funktion, die Aufmerksamkeit erfordert. PHP 7 fügt eine declare-Direktive hinzu: strict_types
, die den strikten Modus verwendet.
Wenn Sie die Typdeklaration des Rückgabewerts verwenden und diese nicht im strikten Modus deklariert ist und der Rückgabewert nicht vom erwarteten Typ ist, wird PHP ihn trotzdem umwandeln. Wenn es sich jedoch um den strikten Modus handelt, wird ein schwerwiegender Fehler von TypeError
ausgelöst.
Erzwingungsmodus:
<?php function foo($a) : int { return $a; } foo(1.0);
Der obige Code kann normal ausgeführt werden und die foo-Funktion gibt int 1 ohne Fehler zurück.
Strikter Modus:
<?php declare(strict_types=1); function foo($a) : int { return $a; } foo(1.0);
Nach der Deklaration wird ein schwerwiegender Fehler ausgelöst.
# PHP Fatal error: Uncaught TypeError: Return value of foo() must be of the type integer, float returned in test.php:6
Die formale Parametertypdeklaration von Funktionen in PHP 7 kann skalar sein. In PHP 5 kann es nur ein Klassenname, eine Schnittstelle, array
oder callable
sein (PHP 5.4 kann es eine Funktion sein, einschließlich anonymer Funktionen). Jetzt können Sie auch string
, int
, und float
Verstanden. bool
<?php // Coercive mode function sumOfInts(int ...$ints) { return array_sum($ints); } var_dump(sumOfInts(2, '3', 4.1));Es ist zu beachten, dass das oben erwähnte Problem des strikten Modus auch hier gilt: Im obligatorischen Modus (Standard, also erzwungene Typkonvertierung) werden Parameter, die nicht dem erwarteten Typ entsprechen, trotzdem erzwungen Bei der Typkonvertierung wird im strikten Modus ein schwerwiegender Fehler von
ausgelöst. TypeError
<?php use some\namespace\{ClassA, ClassB, ClassC as C}; use function some\namespace\{fn_a, fn_b, fn_c}; use const some\namespace\{ConstA, ConstB, ConstC};Aber Sie müssen immer noch The schreiben Name jeder Klasse oder Funktion oder Konstante (es gibt keine
-Methode wie Python). from some import *
Auto-Loading den Speicherort gemäß dem Namespace der Klasse durchsucht, wenn die Klasse aufgerufen wird .
Lassen Sie uns noch kurz darüber sprechen: 1. PHP 5.3 hat begonnen, anonyme Funktionen zu haben, und jetzt gibt es anonyme Klassen 2 Arrays ; 3. Schließung (Closure) fügt eine Aufrufmethode hinzu 4 Delegat) über die neue Syntax von. Die beiden neuen Funktionen von yield from
) können kombiniert werden. Für Einzelheiten können Sie es selbst testen. yield from
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der neuen Funktionen für Skalar-, Operator- und Rückgabewerttypen in PHP7. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!