Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung der neuen Funktionen für Skalar-, Operator- und Rückgabewerttypen in PHP7

Detaillierte Erläuterung der neuen Funktionen für Skalar-, Operator- und Rückgabewerttypen in PHP7

伊谢尔伦
伊谢尔伦Original
2017-06-27 10:19:571390Durchsuche

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!

2. Deklaration des Funktionsrückgabewerttyps

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

3. Skalare Typdeklaration

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, &#39;3&#39;, 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

4. Batch-Deklaration verwenden

In PHP 7 kann use mehrere Klassen oder Funktionen oder const in einem Satz deklarieren:

<?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 *

Eine zu beachtende Frage ist: Wenn Sie ein Framework verwenden, das auf Composer und PSR-4 basiert, kann diese Schreibmethode Klassendateien erfolgreich laden? Tatsächlich ist es möglich, dass die vom Composer registrierte Methode

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

-Generatoren (Rücklauf und

) 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!

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