Heim  >  Artikel  >  Backend-Entwicklung  >  Einführung in die neuen Funktionen von PHP 7.2

Einführung in die neuen Funktionen von PHP 7.2

不言
不言Original
2018-05-24 14:47:033326Durchsuche

Der Inhalt, der in diesem Artikel mit Ihnen geteilt wird, handelt von der Einführung der neuen Funktionen von PHP 7.2. Er hat einen gewissen Referenzwert.

PHP 7.2 wurde im November offiziell veröffentlicht 30. 2017. . Diese Version enthält neue Features, Funktionen und Optimierungen, die uns helfen, besseren Code zu schreiben. In diesem Artikel werde ich einige der interessantesten Sprachfunktionen von PHP 7.2 vorstellen.

Sie können die vollständige Liste der Änderungen auf der Seite „Anfragen für Kommentare“ einsehen.

Kernverbesserungen

Parametertypdeklaration

Ab PHP5 können wir den erwarteten deklarierten Typ von Funktionsparametern angeben. Wenn der falsche Argumenttyp übergeben wird, gibt PHP einen Fehler aus.

Parametertypdeklaration (auch Typhinweis genannt) gibt die Parametertypen an, die voraussichtlich an Funktionen oder Klassenmethoden übergeben werden.

Hier ist ein Beispiel:

class MyClass {
    public $var = 'Hello World';
}$myclass = new MyClass;function test(MyClass $myclass){
    return $myclass->var;
}echo test($myclass);

In diesem Code erfordert die Testfunktion eine MyClass-Instanz. Falsche Parameterdatentypen führen zu einem schwerwiegenden Fehler.

Fatal error: Uncaught TypeError: Argument 1 passed to test() must be an instance of MyClass, string given, called in /app/index.php on line 12 and defined in /app/index.php:8

Seit PHP 7.2 können Typhinweise für Objektdaten verwendet werden, und diese Verbesserung ermöglicht die Verwendung generischer Objekttypen als Parameter einer Funktion oder Methode. Hier ist ein Beispiel:

class MyClass {
    public $var = '';
}class FirstChild extends MyClass {
    public $var = 'My name is Jim';
}class SecondChild extends MyClass {
    public $var = 'My name is John';
}$firstchild = new FirstChild;$secondchild = new SecondChild;function test(object $arg) {
    return $arg->var;
}echo test($firstchild);echo test($secondchild);

Im obigen Beispiel haben wir die Testfunktion zweimal aufgerufen und jedes Mal ein anderes Objekt übergeben. Dies war in früheren PHP-Versionen beispiellos.

Einführung in die neuen Funktionen von PHP 7.2

Typhinweise für PHP 7.0 und PHP 7.2 in Docker testen.

Deklaration des Objektrückgabetyps

Wenn der Variablentyp den erwarteten Typ des Funktionsparameters angibt, kann der Rückgabewerttyp auch den erwarteten Typ angeben.

Die Rückgabetypdeklaration gibt den erwarteten Typ an, den eine Funktion zurückgeben soll.

Seit PHP 7.2 können Objektdatentypen mithilfe von Rückgabetypen deklariert werden. Hier ist ein Beispiel:

class MyClass {
    public $var = 'Hello World';
}

$myclass = new MyClass;function test(MyClass $arg) : object {
    return $arg;
}

echo test($myclass)->var;

Frühere PHP-Versionen haben den folgenden schwerwiegenden Fehler ausgegeben:

Fatal error: Uncaught TypeError: Return value of test() must be an instance of object, instance of MyClass returned in /app/index.php:10

Natürlich würde der PHP 7.2-Code „Hello World“ ausgeben.

Parametertyp-Generalisierung

PHP erlaubt derzeit keinen Unterschied zwischen den Parametertypen einer Unterklasse und ihrer übergeordneten Klasse oder Schnittstelle. Was bedeutet das?
Beziehen Sie sich auf den folgenden Code:

<?phpclass MyClass {
    public function myFunction(array $myarray) { /* ... */ }
}class MyChildClass extends MyClass {
    public function myFunction($myarray) { /* ... */ }
}

Hier haben wir den Parametertyp in der Unterklasse weggelassen. In PHP 7.0 wird die folgende Warnung erzeugt:

Warning: Declaration of MyChildClass::myFunction($myarray) should be compatible with MyClass::myFunction(array $myarray) in %s on line 8

Ab PHP 7.2 können wir Typen in Unterklassen ignorieren, ohne Code zu beschädigen. Mit dieser Lösung können wir eine Klasse in der Bibliothek aktualisieren, um Typhinweise zu verwenden, ohne alle ihre Unterklassen zu aktualisieren.

Nachgestellte Kommas in der Listensyntax

Die Verwendung eines nachgestellten Kommas für das letzte Element eines PHP-Arrays ist eine zulässige Syntax und wird manchmal empfohlen, um das Hinzufügen neuer Elemente zu vermeiden. Ein Fehler wegen fehlendem Komma ist aufgetreten. Seit PHP 7.2 können wir beim Gruppieren von Namespaces abschließende Kommas verwenden.

Siehe Nachgestellte Kommas in der Listensyntax für ein Gefühl für den RFC und einige Beispielcodes.

Sicherheitsverbesserungen

Argon2 beim Passwort-Hashing

Argon2 ist ein leistungsstarker Hashing-Algorithmus, der den Passwort-Hash-Algorithmus-Wettbewerb 2015 gewonnen hat, und PHP 7.2 wird als Ersatz für das sichere Bcrypt dienen Algorithmus.
In der neuen PHP-Version wurde die Konstante PASSWORD_ARGON2I eingeführt, die nun in der Funktionsreihe „password_*“ verwendet werden kann:

password_hash(&#39;password&#39;, PASSWORD_ARGON2I);

Im Gegensatz zu Bcrypt, das nur einen Kostenfaktor verwendet, verwendet Argon2 drei Kostenfaktoren, um sie wie folgt zu unterscheiden:

  • Definiert den Speicher-Overhead in KiB-Menge, der während der Hash-Berechnung verbraucht werden soll (Standard ist 1

  • Definieren Sie den Zeitaufwand für die Anzahl der Iterationen des Hash-Algorithmus (Standardwert ist 2)

  • Parallelfaktor, der zum Festlegen des verwendet wird Anzahl paralleler Threads, die in Hash-Berechnungen verwendet werden (Standardwert Definieren Sie Standardkostenfaktoren für 2)

Die folgenden drei neuen Konstanten werden definiert:

  • PASSWORD_ARGON2_DEFAULT_MEMORY_COST

  • PASSWORD_ARGON2_DEFAULT_TIME_COST

  • PASSWORD_ARGON2_DEFAULT_THREADS

Hier ist ein Beispiel :

$options = [&#39;memory_cost&#39; => 1<<11, &#39;time_cost&#39; => 4, &#39;threads&#39; => 2];
password_hash(&#39;password&#39;, PASSWORD_ARGON2I, $options);

Suchen Sie nach Argon2-Passwort-Hashes. Weitere Informationen.

Libsodium wird Teil des PHP-Kerns

Ab Version 7.2 enthält PHP die Sodium-Bibliothek in seinem Kern. Libsodium ist eine plattform- und sprachübergreifende Bibliothek für Verschlüsselung, Entschlüsselung, Signierung, Passwort-Hashing und mehr.
Diese Bibliothek wurde zuvor über PECL bereitgestellt.
Eine Liste der Libsodium-Funktionen finden Sie unter Schnellstart.
Siehe auch PHP 7.2: die erste Programmiersprache, die moderne Kryptographie zu ihrer Standardbibliothek hinzufügt.

Veraltete Funktionen

Hier ist eine Liste veralteter Funktionen und Features für PHP 7.2, die alle nach PHP 8.0 entfernt werden.

Die Funktion __autoload in PHP 5.1 wurde durch spl_autoload_register ersetzt. Während der Kompilierung wird jetzt ein Verfallshinweis angezeigt.

Wenn ein schwerwiegender Fehler ausgelöst wird, $php_errormsg werden lokale Variablen erstellt. In PHP 7.2 sollten stattdessen error_get_last und error_clear_last verwendet werden.

create_function() Sie können eine Funktion mit einem Funktionsnamen erstellen und dabei die Funktionsparameter und den Funktionskörper als Liste der Funktion übergeben. Aufgrund von Sicherheitsproblemen und schlechter Leistung wird es als veraltet markiert und stattdessen die Kapselung empfohlen.

mbstring.func_overload ini, das auf einen Wert ungleich Null gesetzt ist, wurde als veraltet markiert.

(unset) cast ist ein Ausdruck, der immer null zurückgibt und nutzlos ist.

Wenn der zweite Parameter übergeben wird, analysiert parse_str() die Abfragezeichenfolge in ein Array, andernfalls analysiert es die lokale Symboltabelle. Aus Sicherheitsgründen wird nicht empfohlen, Variablen im Funktionsbereich dynamisch festzulegen, und die Verwendung von parse_str() ohne ein zweites Argument führt zu einer veralteten Benachrichtigung.

gmp_random() ist plattformabhängig und wird veraltet sein. Verwenden Sie stattdessen gmp_random_bits() und gmp_random_rage().

each() Das Iterieren über ein Array verhält sich sehr ähnlich wie foreach(), aber foreach() ist aus mehreren Gründen die bessere Wahl, beispielsweise weil es zehnmal schneller ist. Wenn Sie Ersteres in einer Schleife verwenden, wird nun eine Einstellungsaufforderung ausgegeben.

assert() Die Funktion prüft die gegebene Behauptung und führt die entsprechende Verarbeitung durch, wenn das Ergebnis FALSCH ist. assert() mit einem String-Argument ist aufgrund einer RCE-Sicherheitslücke jetzt veraltet. Die Option zend.assertion ini deaktiviert Assertionsausdrücke.

$errcontext ist ein Array, das lokale Variablen enthält, wenn ein Fehler auftritt. Er kann als letzter Parameter der Fehlerhandlerfunktion set_error_handler() verwendet werden.

Was bedeutet PHP 7.2 für WordPress-Benutzer?

Laut der offiziellen WordPress-Statistikseite haben zum Zeitpunkt dieses Schreibens nur 19,8 % der WordPress-Benutzer ein Upgrade auf PHP 7 durchgeführt. Nur 5 % nutzen PHP 7.1. Sie sehen, dass mehr als 40 % der Benutzer immer noch PHP 5.6 verwenden, und was noch erschreckender ist, ist, dass mehr als 39 % der Benutzer eine PHP-Version verwenden, die nicht mehr unterstützt wird. Im Dezember 2016 änderte WordPress.org die offizielle Empfehlung für Benutzer von PHP 5.6 und empfahl nun die Verwendung von PHP 7 oder höher.
WordPress PHP 7.1 stats

WordPress PHP 7.1-Statistiken

Die oben genannte Datenleistung ist nicht angenehm, da es den Anschein hat, dass PHP 7 schneller ist. Hier sind einige Statistiken:

  • Offizielle PHP-Benchmarks zeigen, dass PHP 7 es dem System ermöglicht, 2 Anfragen pro Sekunde auszuführen, was im Vergleich zu PHP 5.6 fast nur einer durchschnittlichen Latenz entspricht.

  • Christian Vigh hat auch einen PHP-Leistungstest-Vergleich veröffentlicht. Er hat herausgefunden, dass PHP 5.2 fast 400 % langsamer ist als PHP 7.

Wir haben 2018 Leistungsbenchmarks PHP 5.6 vs. PHP 7 vs. HHVM durchgeführt. Ähnlich wie beim obigen Benchmark haben wir festgestellt, dass PHP 7.2 im Vergleich zu PHP 5.6 fast dreimal so viele Transaktionen (Anfragen) pro Sekunde ausführen kann.

WordPress benchmarks

WordPress-Benchmark

  • WordPress 4.9.4 PHP 5.6 Benchmark-Ergebnis: 49,18 req/sec

  • WordPress 4.9.4 PHP 7.0 Benchmark-Ergebnis: 133,55 Anforderungen/Sek.

  • WordPress 4.9.4 PHP 7.1 Benchmark-Ergebnis: 134,24 Anforderungen/Sek.

  • WordPress 4.9.4 PHP 7.2 Benchmark-Ergebnis: 148,80 req/sec �

  • WordPress 4.9.4 HHVM Benchmark-Ergebnis: 144,76 req/sec

Viele Dinge lassen sich nur langsamer aktualisieren, da es viel Zeit in Anspruch nimmt, alle neuen Plugins und Themes von Drittanbietern zu testen, um sicherzustellen, dass sie ordnungsgemäß funktionieren. Oft geht es langsam, weil sie noch nicht fertig sind. Sie sind sich nicht sicher, welche PHP-Version Sie verwenden? Eine der einfachsten Möglichkeiten ist die Verwendung des Tools Pingdom oder der Google Chrome-Entwicklungstools. Im ersten HTTP-Anfrageheader wird normalerweise Ihre Version angezeigt.

Check version of PHP

PHP-Version prüfen

Dies setzt voraus, dass der Host den Wert des X-Powered-By-Headers nicht ändert. Wenn es geändert wird, können Sie die PHP-Versionsinformationen möglicherweise nicht sehen. In diesem Fall müssen Sie die Datei per FTP hochladen. Oder Sie fragen immer den Gastgeber.

Upgrade auf PHP 7.2

PHP 7.2 ist noch teilweise unfertig, aber Sie können es zunächst ausprobieren. Sie können Ihre lokale WordPress-Site testen oder Ihre Skripte in einer Docker-ähnlichen Umgebung überprüfen, und Sie können verschiedene PHP-Versionen über die Befehlszeile testen und vergleichen.

Fazit

Bereit für den Umstieg auf PHP 7.2? Aber zumindest hoffen wir, dass Sie zuerst auf PHP 7 oder höher umgestiegen sind. Wenn Sie jetzt noch nicht bereit sind, es zu testen, aktualisieren Sie Ihre Skripte, überprüfen Sie Ihren Code und sprechen Sie über Ihre ersten Erfahrungen mit PHP 7.2.

Verwandte Empfehlungen:

Kompilieren Sie PHP7.2 unter Windows und extrem erweitertem Judy

So installieren Sie PHP7.2 unter Linux

Instanzmethode zur Installation von PHP7.2 unter CentOS7yum

Das obige ist der detaillierte Inhalt vonEinführung in die neuen Funktionen von PHP 7.2. 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