Heim  >  Artikel  >  Backend-Entwicklung  >  Zusammenfassung einiger neuer Funktionen, die mit PHP7 verwendet werden

Zusammenfassung einiger neuer Funktionen, die mit PHP7 verwendet werden

伊谢尔伦
伊谢尔伦Original
2017-06-27 10:03:501080Durchsuche

Wenn Sie ein auf Composer und PSR-4 basierendes Framework verwenden, kann diese Schreibmethode Klassendateien erfolgreich laden? Tatsächlich ist es möglich. Die vom Composer registrierte automatische Lademethode besteht darin, den Speicherort entsprechend dem Namespace der Klasse zu finden die Klasse heißt , diese Schreibweise hat keine Auswirkung darauf.

1. Operator (NULL-Koaleszenzoperator)

Ich habe dies an die erste Stelle gesetzt, weil ich es für sehr nützlich halte. Verwendung:

$a = $_GET['a'] ?? 1;

Entspricht:

<?php
$a = isset($_GET[&#39;a&#39;]) ? $_GET[&#39;a&#39;] : 1;

Wir wissen, dass der ternäre Operator wie folgt verwendet werden kann:

$a ?: 1

Dies basiert jedoch auf der Voraussetzung, dass $a definiert wurde. Der neue ??-Operator kann die Beurteilung vereinfachen.

2. Deklaration des Funktionsrückgabewerttyps

Beispiel aus der offiziellen Dokumentation (Hinweis... Die Syntax des Seitenlängenparameters ist in PHP 5.6 nur in den oben genannten Versionen verfügbar):

<?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]));

An diesem Beispiel können Sie erkennen, dass jetzt Funktionen (einschließlich anonyme Funktionen) den Typ des Rückgabewerts angeben können.

Das Schreiben dieser Deklaration ähnelt in gewisser Weise Swift:

func sayHello(personName: String) -> String {
  let greeting = "Hello, " + personName + "!"
  return greeting
}

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 einen strikten Modus handelt, wird ein schwerwiegender Fehler vom Typ 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);

# Schwerwiegender PHP-Fehler: Uncaught TypeError: Der Rückgabewert von foo() muss vom Typ Integer sein, Float wird in test.php:6 zurückgegeben

Nach der Deklaration wird ein schwerwiegender Fehler ausgelöst.

Ist es dem strengen Modus von js ähnlich?

3. Skalare Typdeklaration

Die formale Parametertypdeklaration von Funktionen in PHP 7 kann jetzt skalar sein. In PHP 5 kann es sich nur um einen Klassennamen, eine Schnittstelle, ein Array oder eine aufrufbare Funktion handeln (PHP 5.4 kann eine Funktion sein, einschließlich anonymer Funktionen). Jetzt können Sie auch String, Int, Float und Bool verwenden.

Offizielles Beispiel:

<?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 strengen Modus auch hier gilt: Im erzwungenen Modus (Standard, also erzwungene Typkonvertierung) werden weiterhin Parameter verwendet die die erwarteten Anforderungen nicht erfüllen, werden zur Eingabe gezwungen und im strikten Modus wird ein schwerwiegender TypeError-Fehler ausgelöst.

4. Batch-Deklaration verwenden

In PHP 7 können mehrere Klassen oder Funktionen oder const in einem Satz deklariert werden:

<?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 den Namen jeder Klasse, Funktion oder Konstante ausschreiben (es gibt keine Methode aus einem Import * wie Python).

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 von Composer registrierte Autoloading-Methode den Speicherort entsprechend dem Namensraum der Klasse durchsucht. Diese Schreibweise hat keine Auswirkung darauf.

5. Weitere Funktionen

Einige weitere Funktionen werde ich nicht einzeln vorstellen. Wenn Sie interessiert sind, können Sie sich die offizielle Dokumentation ansehen

Eine kurze Einführung Eins:

PHP 5.3 hat begonnen, anonyme Funktionen zu haben, und jetzt gibt es anonyme Klassen

define kann jetzt konstante Arrays definieren;
Closure wurde hinzugefügt Eine Aufrufmethode;
Ein Generator (oder besser gesagt ein Iterator) kann einen endgültigen Rückgabewert (Return) haben oder über die neue Syntax von yield from in einen anderen Generator (Generatordelegat) eintreten.

Zwei neue Funktionen von Generatoren (Rücklauf und Ertrag aus) können kombiniert werden. Sie können das spezifische Erscheinungsbild selbst testen. PHP 7 ist jetzt auf RC5 und die endgültige Version sollte bald verfügbar sein.

Das obige ist der detaillierte Inhalt vonZusammenfassung einiger neuer Funktionen, die mit PHP7 verwendet werden. 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