Inhaltsverzeichnis
新特性预览
移除的一些特性
一些行为的改变
PHP NG
抽象语法树
64位的INT支持
统一的语法变量
foreach循环的改进
新增的几个操作符
返回类型的声明
标量类型的声明
核心错误可以通过异常捕获了
上下问敏感的词法分析
Heim Backend-Entwicklung PHP-Tutorial PHP7新特性的介绍

PHP7新特性的介绍

Jun 23, 2016 pm 01:24 PM

截止到目前为止,PHP官方已经发布了php7的RC5版本,预计在11月份左右会发布第一个正式版本!现在来说php7的重大特性肯定已经是定型了,不会再有什么变动了。后续一些版本的迭代主要也就是修修bug,优化之类的。下面就来说话我们一直期待的php7会有那些主要的变化了。。。

新特性预览

  • ZEND引擎升级到Zend Engine 3,也就是所谓的PHP NG

  • 增加抽象语法树,使编译更加科学

  • 64位的INT支持

  • 统一的变量语法

  • 原声的TLS - 对扩展开发有意义

  • 一致性foreach循环的改进

  • 新增 、**、?? 、\u{xxxx}操作符

  • 增加了返回类型的声明

  • 增加了标量类型的声明

  • 核心错误可以通过异常捕获了

  • 增加了上下文敏感的词法分析

  • 移除的一些特性

  • 移除一些旧的扩展,被移迁移到了PECL(例如:mysql)

  • 移除SAPIs的支持

  • 16进制的字符串转换被废除了

    //PHP5"0x10" == "16"//PHP7"0x10" != "16"
    Nach dem Login kopieren
  • HTTP_RAW_POST_DATA移除了(可以使用php://input替代)

  • 静态函数里面不再支持通过一个不兼容的$this调用一个非静态的函数了

  • $o = & new className{},不再支持这样的写法

  • php.ini文件移除了#作为注释,统一用;去注释

  • 一些行为的改变

  • 不在支持函数定义同名参数

  • 类型的同名构造函数不推荐使用了(目前没有移除,后续会移除)

  • String、int、float等这些关键字不能被作为类名使用了

  • func_get_args()获取的是当前变量的值

  • function test ($num) {    $num++;    var_dump(func_get_args()[0]);};test(1)//PHP5int(1)//PHP7int(2)
    Nach dem Login kopieren

    下面就挑选了一些主要的、核心的、对我们PHPer来说比较重要的特性介绍一下

    PHP NG

    新的php引擎优化了很多地方,也正式因为如此,才使得php7相对于php5性能有了接近两倍的提升!

    • ZVAL结构的重构

    左边是PHP5的zval(24字节),右边是PHP7的zval(16字节);

    可以看出来php7的zval要比php5还要复杂,但是却能从24个字节下降到16个字节,为什呢?

    在C语言中struct的每一个成员变量要各自占据一块独立的内存空间,而union里的成员变量是共用一块内存空间(php7中大量使用union替换了struct)。因此,虽然成员变量看起来多了不少,但是实际占据的内存空间有很多都是公用的却下降了。

    • 使用新的Zend Array替换之前的HashTale结构

    我们php程序中使用最多、最有用、最方便、最灵活的就是数组了,而php5它的底层就是HashTable实现的,php7使用了新的Zend Array类型,性能和访问速度上都有了大幅度提升!

    • 一些非常常用,开销不大的的函数直接变成了引擎支持的opcode

    call_user_function(_array) => ZEND_INIT_USER_CALL
    is_int/string/array/* => ZEND_TYPE_CHECK
    strlen => ZEND_STRLEN
    defined => ZEND+DEFINED

    • 使用了新的内存分配,管理方式,减少了内存的浪费

    • 核心排序zend_sort的优化

      //PHP5 - 快速排序(非稳定排序)array(1 => 0, 0 => 0)//PHP7 - 快速排序+选择排序(稳定排序)array(0 => 0, 1 => 0)
      Nach dem Login kopieren

    小于16个元素的使用选择排序,大于16个按照16个为单位去分割,分别使用选择排序,然后再全部合起来使用快速排序。排序较之前相比,内部元素由非稳定排序变成稳定排序,减少元素的交换次数,减少对内存的操作次数,性能提升40%

    抽象语法树

    假如现在我们有这样的需求,要对php源文件就行语法检测,实现编码规范。php5之前的话,没有AST,直接从parser就生成了opcodes!就需要借助一些外部的php语法解析器来实现;而php7增加了AST,我们可以自己去实现这样一个扩展,利用扩展提供的函数可以直接获取文件对应的的AST结构,而这样的结构正是我们可以识别的,所以就可以在这个基础上去做一些优化和判断了。

    64位的INT支持

    • 支持存储大于2GB的字符串

    • 支持上传大小大于2GB的文件

    • 保证字符串在所有平台上【64位】都是64bit

    统一的语法变量

    $$foo['bar']['baz']//PHP5($$foo)[‘bar’]['baz']//PHP7: 遵循从左到右的原则${$foo[‘bar’]['baz']}
    Nach dem Login kopieren

    foreach循环的改进

    //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)
    Nach dem Login kopieren

    新增的几个操作符

    //<=> - 比较两个数的大小【-1:前者小于后者,0:前者等于后者,1:前者大于后者】echo 1 <=> 2;//-1echo 1 <=> 1;//0echo 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}";//新
    Nach dem Login kopieren

    返回类型的声明

    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 
    Nach dem Login kopieren

    标量类型的声明

    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…
    Nach dem Login kopieren

    核心错误可以通过异常捕获了

    try {    non_exists_func();} catch(EngineException $e) {echo “Exception: {$e->getMessage();}\n”;}//这里用php7试了一下还是没法捕获,但是看鸟哥介绍说是可行的。。。#Exception: Call to undefined function non_exists_func()
    Nach dem Login kopieren

    上下问敏感的词法分析

    //PHP5class Collection {public function foreach($arr) {}}#Parse error:  parse error, expecting `"identifier (T_STRING)”’...//PHP7class 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();
    Nach dem Login kopieren

    差不多了,基本上就把自己对php7的初步了解说完了,其中肯定有很多不对的、低级的错误,希望各位兄弟及时指正,我好改一下,做个笔记!嘿嘿!

    其中的内容和截图大部分都是来自鸟哥演讲的ppt。。。

    Erklärung dieser Website
    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

    Heiße KI -Werkzeuge

    Undresser.AI Undress

    Undresser.AI Undress

    KI-gestützte App zum Erstellen realistischer Aktfotos

    AI Clothes Remover

    AI Clothes Remover

    Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

    Undress AI Tool

    Undress AI Tool

    Ausziehbilder kostenlos

    Clothoff.io

    Clothoff.io

    KI-Kleiderentferner

    AI Hentai Generator

    AI Hentai Generator

    Erstellen Sie kostenlos Ai Hentai.

    Heißer Artikel

    R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
    3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Beste grafische Einstellungen
    3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
    3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
    WWE 2K25: Wie man alles in Myrise freischaltet
    3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

    Heiße Werkzeuge

    Notepad++7.3.1

    Notepad++7.3.1

    Einfach zu bedienender und kostenloser Code-Editor

    SublimeText3 chinesische Version

    SublimeText3 chinesische Version

    Chinesische Version, sehr einfach zu bedienen

    Senden Sie Studio 13.0.1

    Senden Sie Studio 13.0.1

    Leistungsstarke integrierte PHP-Entwicklungsumgebung

    Dreamweaver CS6

    Dreamweaver CS6

    Visuelle Webentwicklungstools

    SublimeText3 Mac-Version

    SublimeText3 Mac-Version

    Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

    Arbeiten mit Flash -Sitzungsdaten in Laravel Arbeiten mit Flash -Sitzungsdaten in Laravel Mar 12, 2025 pm 05:08 PM

    Laravel vereinfacht die Behandlung von temporären Sitzungsdaten mithilfe seiner intuitiven Flash -Methoden. Dies ist perfekt zum Anzeigen von kurzen Nachrichten, Warnungen oder Benachrichtigungen in Ihrer Anwendung. Die Daten bestehen nur für die nachfolgende Anfrage standardmäßig: $ Anfrage-

    Curl in PHP: So verwenden Sie die PHP -Curl -Erweiterung in REST -APIs Curl in PHP: So verwenden Sie die PHP -Curl -Erweiterung in REST -APIs Mar 14, 2025 am 11:42 AM

    Die PHP Client -URL -Erweiterung (CURL) ist ein leistungsstarkes Tool für Entwickler, das eine nahtlose Interaktion mit Remote -Servern und REST -APIs ermöglicht. Durch die Nutzung von Libcurl, einer angesehenen Bibliothek mit Multi-Protokoll-Dateien, erleichtert PHP Curl effiziente Execu

    Vereinfachte HTTP -Reaktion verspottet in Laravel -Tests Vereinfachte HTTP -Reaktion verspottet in Laravel -Tests Mar 12, 2025 pm 05:09 PM

    Laravel bietet eine kurze HTTP -Antwortsimulationssyntax und vereinfache HTTP -Interaktionstests. Dieser Ansatz reduziert die Code -Redundanz erheblich, während Ihre Testsimulation intuitiver wird. Die grundlegende Implementierung bietet eine Vielzahl von Verknüpfungen zum Antworttyp: Verwenden Sie Illuminate \ Support \ facades \ http; Http :: fake ([ 'Google.com' => 'Hallo Welt',, 'github.com' => ['foo' => 'bar'], 'Forge.laravel.com' =>

    12 Beste PHP -Chat -Skripte auf Codecanyon 12 Beste PHP -Chat -Skripte auf Codecanyon Mar 13, 2025 pm 12:08 PM

    Möchten Sie den dringlichsten Problemen Ihrer Kunden in Echtzeit und Sofortlösungen anbieten? Mit Live-Chat können Sie Echtzeitgespräche mit Kunden führen und ihre Probleme sofort lösen. Sie ermöglichen es Ihnen, Ihrem Brauch einen schnelleren Service zu bieten

    Erklären Sie das Konzept der späten statischen Bindung in PHP. Erklären Sie das Konzept der späten statischen Bindung in PHP. Mar 21, 2025 pm 01:33 PM

    In Artikel wird die in PHP 5.3 eingeführte LSB -Bindung (LSB) erörtert, die die Laufzeitauflösung der statischen Methode ermöglicht, um eine flexiblere Vererbung zu erfordern. Die praktischen Anwendungen und potenziellen Perfo von LSB

    Anpassung/Erweiterung von Frameworks: So fügen Sie benutzerdefinierte Funktionen hinzu. Anpassung/Erweiterung von Frameworks: So fügen Sie benutzerdefinierte Funktionen hinzu. Mar 28, 2025 pm 05:12 PM

    In dem Artikel werden Frameworks hinzugefügt, das sich auf das Verständnis der Architektur, das Identifizieren von Erweiterungspunkten und Best Practices für die Integration und Debuggierung hinzufügen.

    Rahmensicherheitsmerkmale: Schutz vor Schwachstellen. Rahmensicherheitsmerkmale: Schutz vor Schwachstellen. Mar 28, 2025 pm 05:11 PM

    In Artikel werden wichtige Sicherheitsfunktionen in Frameworks erörtert, um vor Schwachstellen zu schützen, einschließlich Eingabevalidierung, Authentifizierung und regelmäßigen Aktualisierungen.

    See all articles