• 技术文章 >后端开发 >PHP7

    介绍php7和PHP5对比的新特性和性能优化

    coldplay.xixicoldplay.xixi2021-03-22 10:07:52转载354

    php7和PHP5对比的新特性和性能优化

    1. 抽象语法树(AST)

    AST在PHP编译过程作为一个中间件的角色,替换原来直接从解释器吐出opcode的方式,让解释器(parser)和编译器(compliler)解耦,可以减少一些Hack代码,同时,让实现更容易理解和可维护

    推荐(免费):PHP7

    2. Natice TLS:

    线程数据共享安全,开启一个全局线程用作数据共享内存空间

    3. 指定参数 返回值类型

    4. zval 结构的变化

    5. 异常处理

    PHP 5 的 try ... catch ... finally 无法处理传统错误,如果需要,你通常会考虑用 set_error_handler() 来 Hack 一下。但是仍有很多错误类型是 set_error_handler() 捕捉不到的

    PHP 7引入 Throwable 接口,错误及异常都实现了 Throwable,无法直接实现 Throwable,但可以扩展 \Exception 和 \Error 类。可以用 Throwable 捕捉异常跟错误。\Exception 是所有PHP及用户异常的基类;\Error 是所有内部PHP错误的基类。

    6. 新的参数解析方式

    7. hashtable变化

    buckets、Zvals不再单独分配内存,消除了很多没用的冗余。

    8、空合并操作符(Null Coalesce Operator)

    直接上例子:

    $name = $name ?? "NoName";  // 如果$name有值就取其值,否则设$name成"NoName"

    9、飞船操作符(Spaceship Operator)(组合比较操作符)

    形式:(expr) <=> (expr)

    左边运算对象小,则返回-1;左、右两边运算对象相等,则返回0;左边运算对象大,则返回1。

    $name = ["Simen", "Suzy", "Cook", "Stella"];
    usort($name, function ($left, $right) {
        return $left <=> $right;
    });
    print_r($name);

    10、常量数组(Constant Array)

    PHP 7 之前只允许类/接口中使用常量数组,现在 PHP 7 也支持非类/接口的普通常量数组了。

    define("USER", [
      "name"  => "Simen",
      "sex"   => "Male",
      "age"   => "38",
      "skill" => ["PHP", "MySQL", "C"]
    ]);
    // USER["skill"][2] = "C/C++";  // PHP Fatal error:  Cannot use temporary expression in write context in...

    11、统一了变量语法

    $goo = [
        "bar" => [
            "baz" => 100,
            "cug" => 900
        ]
    ];
    
    $foo = "goo";
    
    $$foo["bar"]["baz"];  // 实际为:($$foo)['bar']['baz']; PHP 5 中为:${$foo['bar']['baz']};
                          // PHP 7 中一个笼统的判定规则是,由左向右结合。

    12、Throwable 接口

    这是 PHP 7 引进的一个值得期待的新特性,将极大增强 PHP 错误处理能力。PHP 5 的 try ... catch ... finally 无法处理传统错误,如果需要,你通常会考虑用 set_error_handler() 来 Hack 一下。但是仍有很多错误类型是 set_error_handler() 捕捉不到的。PHP 7引入 Throwable 接口,错误及异常都实现了 Throwable,无法直接实现 Throwable,但可以扩展 \Exception 和 \Error 类。可以用 Throwable 捕捉异常跟错误。\Exception 是所有PHP及用户异常的基类;\Error 是所有内部PHP错误的基类。

    $name = "Tony";
    try {
        $name = $name->method();
    } catch (\Error $e) {
        echo "出错消息 --- ", $e->getMessage(), PHP_EOL;
    }
    
    try {
        $name = $name->method();
    } catch (\Throwable $e) {
        echo "出错消息 --- ", $e->getMessage(), PHP_EOL;
    }
    
    try {
        intp(5, 0);
    } catch (\pisionByZeroError $e) {
        echo "出错消息 --- ", $e->getMessage(), PHP_EOL;
    }

    13、use 组合声明

    use 组合声明可以减少 use 的输入冗余。

    use PHPGoodTaste\Utils\{
        Util,
        Form,
        Form\Validation,
        Form\Binding
    };

    14、一次捕捉多种类型的异常 / 错误

    PHP 7.1 新添加了捕获多种异常/错误类型的语法——通过竖杠“|”来实现。

    try {
          throw new LengthException("LengthException");
        //   throw new pisionByZeroError("pisionByZeroError");
        //   throw new Exception("Exception");
    } catch (\pisionByZeroError | \LengthException $e) {
        echo "出错消息 --- ", $e->getMessage(), PHP_EOL;
    } catch (\Exception $e) {
        echo "出错消息 --- ", $e->getMessage(), PHP_EOL;
    } finally {
        // ...
    }

    15、可见性修饰符的变化

    PHP 7.1 之前的类常量是不允许添加可见性修饰符的,此时类常量可见性相当于 public。PHP 7.1 为类常量添加了可见性修饰符支持特性。总的来说,可见性修饰符使用范围如下所示:

    class YourClass 
    {
        const THE_OLD_STYLE_CONST = "One";
    
        public const THE_PUBLIC_CONST = "Two";
        private const THE_PRIVATE_CONST = "Three";
        protected const THE_PROTECTED_CONST = "Four";
    }

    iterable 伪类型

    PHP 7.1 引入了 iterable 伪类型。iterable 类型适用于数组、生成器以及实现了 Traversable 的对象,它是 PHP 中保留类名。

    $fn = function (iterable $it) : iterable {
        $result = [];
        foreach ($it as $value) {
            $result[] = $value + 1000;
        }
        return $result;
    };
    
    $fn([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);

    可空类型(Nullable Type)

    PHP 7.1 引入了可空类型。看看新兴的 Kotlin 编程语言的一个噱头特性就是可空类型。PHP 越来越像“强类型语言了”。对于同一类型的强制要求,可以设置其是否可空。

    $fn = function (?int $in) {
        return $in ?? "NULL";
    };
    
    $fn(null);
    $fn(5);
    $fn();  // TypeError: Too few arguments to function {closure}(), 0 passed in ...

    Void 返回类型

    PHP 7.1 引入了 Void 返回类型。

    function first(): void {
        // ...
    }
    
    function second(): void {
        // ...
        return;
    }

    以上就是介绍php7和PHP5对比的新特性和性能优化的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:CSDN,如有侵犯,请联系admin@php.cn删除
    专题推荐:php7 PHP5
    上一篇:总结PHP升级7.2之后需要注意的事情 下一篇:整理PHP5.5 ~ PHP7.2 新特性
    大前端线上培训班

    相关文章推荐

    • php7.0怎么安装redis扩展• PHP7中如何使用太空船操作符• PHP7中Closure :: call的使用范例• 一起学习php7连接MySQL制作简易查询程序• php7新特性之返回类型声明的使用

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网