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

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

php7PHP5对比的新特性和性能优化

1. 抽象语法树(AST)

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

推荐(免费):PHP7

立即学习“PHP免费学习笔记(深入)”;

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 PHPGoodTasteUtils{    Util,    Form,    FormValidation,    FormBinding};

登录后复制

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 为类常量添加了可见性修饰符支持特性。总的来说,可见性修饰符使用范围如下所示:

函数/方法:public、private、protected、abstract、final类:abstract、final属性/变量:public、private、protected类常量:public、private、protected

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对比的新特性和性能优化的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/1969949.html

(0)
上一篇 2025年2月23日 07:43:16
下一篇 2025年2月23日 07:43:29

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • LNMP下PHP版本如何切换

    本文介绍如何在LNMP (Linux, Nginx, MySQL, PHP) 环境中轻松切换PHP版本。 以下步骤以Ubuntu系统为例: 一、安装多个PHP版本 首先,安装所需PHP版本。例如,安装PHP 7.2和PHP 7.4: sud…

    2025年3月28日
    100
  • LNMP如何监控系统状态

    LNMP架构(Linux、Nginx、MySQL、PHP)是构建网站和Web应用的常用组合。 本文介绍几种监控LNMP系统状态的方法,确保其稳定运行。 一、系统资源监控 使用 top、htop 或 vmstat 等命令行工具实时监控CPU、…

    2025年3月28日
    100
  • 如何配置LNMP服务器

    搭建LNMP服务器,需要安装并配置Nginx、MySQL(或MariaDB)和PHP。以下步骤将指导您完成LNMP环境的配置: 一、安装Nginx 首先,更新系统软件包: Debian/Ubuntu系统: sudo apt update &…

    2025年3月28日
    100
  • 如何在LNMP中进行版本升级

    本文指导您如何在LNMP (Linux, Nginx, MySQL/MariaDB, PHP) 环境下安全高效地升级组件版本,主要针对Ubuntu和CentOS系统。 一、准备工作:更新系统软件包 首先,更新您的系统软件包列表,确保拥有最新…

    2025年3月28日
    100
  • 如何在Linux上安装LNMP环境

    在Linux服务器上部署LNMP (Linux, Nginx, MySQL, PHP) 环境是搭建Web应用的常见方法。本文提供详细的安装步骤: 一、安装Nginx Web服务器 首先更新系统软件包列表,然后安装Nginx: Debian/…

    2025年3月28日
    100
  • LNMP怎样监控运行

    LNMP(Linux + Nginx + MySQL + PHP)架构是搭建网站和在线应用的常用组合。为了保证LNMP环境的稳定运行,实时监控至关重要。本文介绍几种有效的监控方法: 一、系统资源监控 利用系统自带工具,例如top、htop或…

    2025年3月28日
    100
  • Linux系统里LAMP组件如何更新

    本文介绍在Linux系统中更新LAMP组件的多种方法。 方法一:单独更新Apache、MariaDB/MySQL和PHP 此方法针对需要单独更新各个组件的用户。 更新Apache: sudo apt updatesudo apt upgra…

    2025年3月28日
    100
  • LNMP怎样进行故障排查

    LNMP架构(Linux、Nginx、MySQL、PHP)是搭建网站和Web应用的常用组合。本文提供LNMP环境故障排查的系统化步骤: 一、 问题确认 首先,收集用户反馈和系统告警,明确故障现象、发生时间、受影响服务及应用。 二、 系统资源…

    2025年3月28日
    100
  • LNMP怎样进行版本升级

    LNMP(Linux、Nginx、MySQL、PHP)环境升级指南。本文将指导您如何安全高效地升级LNMP环境,确保网站稳定运行。 升级步骤: 数据备份: 升级前,务必备份网站数据和所有配置文件,以防意外发生。 系统更新: 使用以下命令更新…

    2025年3月28日
    100
  • php7函数,声明,返回值等新特性介绍

    使用 … 运算符定义变长参数函数 (php 5 >= 5.6.0, php 7) 现在可以不依赖 func_get_args(), 使用 … 运算符 来实现 变长参数函数。 登录后复制 以上例程会输出: $re…

    编程技术 2025年3月6日
    200

发表回复

登录后才能评论