美文网首页工作生活
PHP7新增特性和改变

PHP7新增特性和改变

作者: 机智的老刘明同志 | 来源:发表于2019-07-04 18:06 被阅读0次

    新增特性和改变:   

        1.declare(strict_type=1);   

            如果不开启strict_type,PHP将会尝试帮你转换成要求的类型,而开启之后,会改变PHP就不再做类型转换,类型不匹配就会抛出错误

        2. 更多的Error变为可捕获的Exception

            比如调用一个不存在的函数

        3.加入了AST(抽象语法树)

            ①什么是AST?

            例如:result = 6 + 7 * 3 用抽象语法树表示

            ②什么是opcodes? 

            Opcode是一种PHP脚本编译后的中间语言,就像Java的ByteCode,或者.NET的MSL

    =

            ③从 php 脚本到 opcodes 的执行的过程 

            PHP5:

                Lexing:词法扫描分析,将源文件转换成 token 流;

                Parsing:语法分析,在此阶段生成 op arrays。

            PHP7:

                Lexing:词法扫描分析,将源文件转换成 token 流;

                Parsing:语法分析,从 token 流生成抽象语法树;

                Compilation:从抽象语法树生成 op arrays。

            ④为什么要用AST?

            从以上的步骤来看,这比之前的过程还多了一步,所以按常理来说这反而会增加程序的执行时间和内存的使用。但事实上内存的使用确实增加了,但是执行时间上却有所降低。

            如果仅仅是时间上的优化,似乎也不是使用 AST 的充足理由。其实实现 AST 并不是基于时间优化上的考虑,而是为了解决语法上的问题。

            yield 不需要括号

            括号不影响行为

            list() 的变化

            引用赋值的顺序

            __clone 方法可以直接调用

        4.新增操作符号 ??  <=>

            $c = $a <=> $b

            如果$a > $b, $c 的值为1

            如果$a == $b, $c 的值为0

            如果$a < $b, $c 的值为-1

            ??

            $username = isset($_GET['user]) ? $_GET['user] : 'nobody';

            $username = $_GET['user'] ?? 'nobody';

        5.define() 定义常量数组 

            define('ARR',['a','b']);

            echo ARR[1];// a

        6.匿名函数

            $anonymous_func = function(){return 'function';};

            echo $anonymous_func(); // 输出function

        7.Unicode字符格式支持(echo “\u{9999}”)

        8.命名空间引用优化

            // PHP7以前语法的写法

            use FooLibrary\Bar\Baz\ClassA;

            use FooLibrary\Bar\Baz\ClassB;

            // PHP7新语法写法

            use FooLibrary\Bar\Baz\{ ClassA, ClassB};

        9.Unserialize 提供过滤特性



    相关文章

      网友评论

        本文标题:PHP7新增特性和改变

        本文链接:https://www.haomeiwen.com/subject/onzlhctx.html