PHP hat jetzt offiziell die RC5-Version von PHP7 veröffentlicht. Jetzt sind die wichtigsten Funktionen von PHP7 definitiv fertiggestellt. es wird keine Änderungen mehr geben. Bei den Iterationen einiger Folgeversionen handelt es sich hauptsächlich um Fehlerbehebungen, Optimierungen und Ähnliches. Lassen Sie uns über die wichtigsten Änderungen in PHP7 sprechen, auf die wir uns gefreut haben.
Vorschau auf neue Funktionen
ZEND引擎升级到Zend Engine 3,也就是所谓的PHP NG 增加抽象语法树,使编译更加科学 64位的INT支持 统一的变量语法 原声的TLS - 对扩展开发有意义 一致性foreach循环的改进 新增 <=>、**、?? 、\u{xxxx}操作符 增加了返回类型的声明 增加了标量类型的声明 核心错误可以通过异常捕获了 增加了上下文敏感的词法分析
Verwandte Lernempfehlungen: PHP Programmieren vom Anfänger bis zum Experten
Einige Funktionen entfernt
1. Einige alte Erweiterungen wurden entfernt und auf PECL migriert (z. B.: MySQL)
2. Unterstützung für SAPIs entfernt
3. Tags wie und language="php" wurden entfernt
4. Hexadezimale String-Konvertierung wurde abgeschafft
//PHP5 "0x10" == "16" //PHP7 "0x10" != "16"
5. HTTP_RAW_POST_DATA wurde entfernt (Sie können stattdessen php://input verwenden)
6 Statische Funktionen unterstützen den Aufruf einer nicht statischen Funktion nicht mehr über ein inkompatibles $this
$o = & new className{}. wird nicht mehr unterstützt.
Die Datei 7.php.ini hat # als Kommentar entfernt und verwendet ; zum Kommentieren
Einige Verhaltensänderungen
Konstruktoren mit demselben Namen in Funktionsdefinitionsparametern vom Typ
werden nicht mehr unterstützt (derzeit nicht entfernt, werden aber in Zukunft entfernt)
String, int, float und andere Schlüsselwörter können nicht als Klassennamen verwendet werden
func_get_args() erhält den Wert der aktuellen Variablen
function test ($num) { $num++; var_dump(func_get_args()[0]); }; test(1) //PHP5 int(1) //PHP7 int(2)
Hier sind einige Haupt- und Kernfunktionen, die für unseren PHPer wichtiger sind. Lassen Sie mich die wichtigen Funktionen vorstellen
PHP NG
Die neue PHP-Engine hat viele Stellen optimiert, und deshalb hat PHP7 offiziell eine bessere Leistung als PHP5.
Rekonstruktion der ZVAL-Struktur
Links ist der Zval von PHP5 (24 Bytes) und rechts der Zval von PHP7 (16 Bytes) ;
Es ist ersichtlich, dass der Zval von PHP7 komplizierter ist als der von PHP5, aber er kann von 24 Bytes auf 16 Bytes reduziert werden.
In der C-Sprache belegt jede Mitgliedsvariable von struct einen unabhängigen Speicherplatz, während sich die Mitgliedsvariablen in Union einen Speicherplatz teilen (Union wird häufig als Ersatz für struct in PHP7 verwendet). Obwohl es den Anschein hat, dass es viel mehr Mitgliedsvariablen gibt, ist daher der tatsächlich belegte Speicherplatz, von denen viele öffentlich sind, zurückgegangen.
Verwenden Sie das neue Zend Array, um die vorherige HashTale-Struktur zu ersetzen
Das am häufigsten verwendete, nützlichste, bequemste und flexibelste in unserem PHP Programme Es handelt sich um ein Array, und die unterste Ebene von PHP5 wird von HashTable implementiert. PHP7 verwendet den neuen Zend-Array-Typ, und die Leistung und Zugriffsgeschwindigkeit wurden erheblich verbessert!
Einige sehr häufig verwendete und kostengünstige Funktionen werden direkt zu Opcodes, die von der Engine unterstützt werden
call_user_function(_array) => ZEND_INIT_USER_CALL is_int/string/array/* => ZEND_TYPE_CHECK strlen => ZEND_STRLEN defined => ZEND+DEFINED
Verwendet neue Speicherzuweisungs- und Verwaltungsmethoden, um Speicherverschwendung zu reduzieren
Kernsortierung zend_sort Optimize
//PHP5 - 快速排序(非稳定排序) array(1 => 0, 0 => 0) //PHP7 - 快速排序+选择排序(稳定排序) array(0 => 0, 1 => 0)
Verwenden Sie die Auswahlsortierung für Elemente mit weniger als 16 Elementen, teilen Sie sie für Elemente mit mehr als 16 Elementen in 16er-Einheiten auf, verwenden Sie die Auswahlsortierung separat, kombinieren Sie sie dann alle und verwenden Sie die Schnellsortierung. Im Vergleich zur vorherigen Sortierung haben sich die internen Elemente von instabiler Sortierung zu stabiler Sortierung geändert, wodurch die Anzahl der Elementaustausche verringert, die Anzahl der Speicheroperationen verringert und die Leistung um 40 % verbessert wurde
Abstrakter Syntaxbaum
Wenn wir jetzt einen solchen Bedarf haben, müssen wir eine Syntaxerkennung für die PHP-Quelldatei durchführen und Codierungsstandards implementieren. Vor PHP5 gab es kein AST und Opcodes wurden direkt vom Parser generiert! Um dies zu erreichen, müssen wir einige externe PHP-Syntaxparser verwenden. PHP7 fügt AST hinzu. Wir können eine solche Erweiterung selbst implementieren und die von der Erweiterung bereitgestellten Funktionen verwenden, um die der Datei entsprechende AST-Struktur direkt abzurufen Wir können es identifizieren, sodass wir auf dieser Grundlage einige Optimierungen und Beurteilungen vornehmen können.
64-Bit-INT-Unterstützung
Unterstützt die Speicherung von Zeichenfolgen mit mehr als 2 GB
Unterstützt das Hochladen von Dateien mit mehr als 2 GB
Stellen Sie sicher, dass die Zeichenfolge vorhanden ist in [64-bit] ist 64bit auf allen Plattformen
Einheitliche Syntaxvariablen
$$foo['bar']['baz'] //PHP5 ($$foo)[‘bar']['baz'] //PHP7: 遵循从左到右的原则 ${$foo[‘bar']['baz']}
Verbesserungen in der foreach-Schleife
//PHP5 $a = array(1, 2, 3);foreach ($a as $v){var_dump(current($a));} int(2) int(2) int(2) $a = array(1, 2, 3);$b=&$a;foreach ($a as $v){var_dump(current($a));} int(2) int(3) bool(false) $a = array(1, 2, 3);$b=$a;foreach ($a as $v){var_dump(current($a));} int(1) int(1) int(1) //PHP7:不再操作数据的内部指针了 $a = array(1, 2, 3);foreach ($a as $v){var_dump(current($a))} int(1) int(1) int(1) $a = array(1, 2, 3);$b=&$a;foreach ($a as $v){var_dump(current($a)) int(1) int(1) int(1) $a = array(1, 2, 3);$b=$a;foreach ($a as $v){var_dump(current($a))} int(1) int(1) int(1)
Mehrere neue Operatoren
//<=> - 比较两个数的大小【-1:前者小于后者,0:前者等于后者,1:前者大于后者】 echo 1 <=> 2;//-1 echo 1 <=> 1;//0 echo 1 <=> 0;//1 // ** - 【a的b次方】 echo 2 ** 3;//8 //?? - 三元运算符的改进 //php5 $_GET['name'] ? $_GET['name'] : '';//Notice: Undefined index: … //php7 $_GET['name'] ?? '' -> ''; //\u{xxxx} - Unicode字符的解析 echo "\u{4f60}";//你 echo "\u{65b0}";//新
Deklaration des Rückgabetyps
function getInt() : int { return “test”; }; getInt(); //PHP5 #PHP Parse error: parse error, expecting '{'... //PHP7 #Fatal error:Uncaught TypeError: Return value of getInt() must be of the type integer, string returned
Deklaration des Skalartyps
function getInt(int $num) : int { return $num; }; getInt(“test”); //PHP5 #PHP Catchable fatal error: Argument 1 passed to getInt() must be an instance of int, string given… //PHP7 #Fatal error: Uncaught TypeError: Argument 1 passed to getInt() must be of the type integer, string given…
Kernfehler können durch Ausnahmen abgefangen werden
try { non_exists_func(); } catch(EngineException $e) { echo “Exception: {$e->getMessage();}\n”; } //这里用php7试了一下还是没法捕获,但是看鸟哥介绍说是可行的。。。 #Exception: Call to undefined function non_exists_func()
Kontextsensitive lexikalische Analyse
//PHP5 class Collection {public function foreach($arr) {}} #Parse error: parse error, expecting `"identifier (T_STRING)”'... //PHP7 class Collection { public function foreach($arr) {} public function in($arr){} public function where($condition){} public function order($condition){} } $collection = new Collection(); $collection->where()->in()->foreach()->order();
Das ist Ich habe im Grunde mein vorläufiges Verständnis von PHP7 abgeschlossen. Ich hoffe, dass ihr sie rechtzeitig korrigieren und mir Notizen machen könnt. hey-hey!
Das obige ist der detaillierte Inhalt vonWerfen wir einen Blick auf die wichtigsten neuen Funktionen von PHP7. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!