PHP7.0 的新特性

PHP7.0 的新特性经常会被面试官问到,在平时的项目开发中运用它们也会提升一定的代码质量和代码运行性能,可见这个知识点的重要性。不过有很多人都没有去系统的了解掌握,今天我刚好系统整理了一番分享出来。

图片版

PHP7.0 的新特性

文字版

1. 新增了标量类型声明和函数的返回值类型声明
例如:
<?php declare(strict_types=1)//1:严格模式 0:强制模式(默认)
class OrderService extends BaseService
{
   ...
     /**
     * 所有订单详情都是通过这个入口
     * @param $orderNo
     * @return array|mixed
     * @throws Exception
     */
     public function getOrderDetailByOrderNo(string $orderNo) : array
    {
      $order = $this->model->getByFields(['order_no' => $orderNo]);

      if (empty($order)) {
      return [];
      }
      return (new OrderFactory)->getOrder($order['order_type'])->getOrderDetailByOrderNo($orderNo);
    }
}

2. 太空船运算符(组合比较符):<=>
例如:
$c = $a <=> $b
若 $a>$b,则 $c=1
若 $a=$b,则 $c=0
若 $a<$b,则 $c=-1

3. NULL合并运算:??
PHP7 之前:$c = isset($b)?$b:0;
PHP7+ :$c = $b??0;

4. 定义常量数组:define("ARR",[1,2,3])

5. 新增抽象语法树AST(高度解耦)
PHP7 之前:PHP 代码 -> Parser 语法解析 -> OPCODE -> 执行
PHP7+ :PHP 代码 -> Parser 语法解析 -> AST -> OPCODE -> 执行

6. 命名空间引用优化
PHP7 之前:
use FooLibrary\Bar\Baz\ClassA; 
use FooLibrary\Bar\Baz\ClassB; 
PHP7+:
use FooLibrary\Bar\Baz\{ ClassA, ClassB};

7. 反序列化函数Unserialize()提供更安全的过滤特性

8. 新增整除函数intdiv()
例如:intdiv(10,3)
结果:3

9. 错误处理更友好
* 在PHP7+ 中,很多致命错误以及可恢复的致命错误,都被转换为异常来处理了。 这些异常继承自 Error 类,此类实现了 Throwable 接口 (所有异常都实现了这个基础接口)
* PHP7+ 进一步方便开发者处理, 让开发者对程序的掌控能力更强. 因为在默认情况下, Error会直接导致程序中断, 而PHP7+ 则提供捕获并且处理的能力, 让程序继续执行下去, 为程序员提供更灵活的选择

10. 新增匿名类
通过 new class 来实例化一个匿名类,可以用来替代一些"用后即焚"的完整类定义
例如:
<?php
interface Logger {
   public function log(string $msg);
}
class Application {
   private $logger;
   public function getLogger(): Logger {
      return $this->logger;
   }
   public function setLogger(Logger $logger) {
      $this->logger = $logger;
   }  
}
$app = new Application;
// 使用 new class 创建匿名类
$app->setLogger(new class implements Logger {
   public function log(string $msg) {
      print($msg);
   }
});
$app->getLogger()->log("我的第一条日志");
结果:我的第一条日志

11. 新增两个更安全的伪随机生成器函数random_bytes()和random_int()

12. Closure::call()
有着更好的性能,将一个闭包函数动态绑定到一个新的对象实例并调用执行该函数
例如:
<?php
class A {
    private $x = 1;
}
// PHP 7 之前版本定义闭包函数代码
$getXCB = function() {
    return $this->x;
};
// 闭包函数绑定到类 A 上
$getX = $getXCB->bindTo(new A, 'A'); 
echo $getX();

// PHP 7+ 代码
$getX = function() {
    return $this->x;
};
echo $getX->call(new A);

13. 移除扩展:ereg、mssql、mysql
Image placeholder
吴进15506142982
未设置
  59人点赞

没有讨论,发表一下自己的看法吧

推荐文章
PHP7.4 新特性和废弃的功能

PHP7.4新特性PHP7.4上月28号已经发布了。又带来了一些新特性。可以让我们的代码写的更少了。1.属性添加限定类型 4.数组解包使用展开运算符...解包数组。这个特性,应该又是从js那吸收过来的

降低 80% 的读写响应延迟!我们测评了 etcd 3.4 新特性(内含读写发展史)

导读:etcd作为 K8s集群中的存储组件,读写性能方面会受到很多压力,而 etcd 3.4 中的新特性将有效缓解压力,本文将从etcd 数据读写机制的发展历史着手,深入解读 etcd 3.4 新特性

Java 14 可能带来什么新特性?

JDK/Java13在一个月前已经发布,该版本带来了5大新特性,笔者观察到其中的TextBlocks(文本块)特性似乎被讨论最多。文本块特性与常见的Python“””anyinput”””特性一样,它

Ambassador 0.52 新特性:会话亲和性、负载均衡控制、gRPC-Web

本文由公众号EAWorld翻译发表,转载需注明出处。作者:RichardLi 译者:白小白 原文:http://t.cn/E6cZoyG现时的云原生应用由多种异构的服务或者微服务组成,服务间、服务与客

Redis 6.0 新特性之集群代理

Redis6.0releasenotes ======================= UpgradeurgencyLOW:ThisisthefirstRCofRedis6. Introduct

PHP 核心特性 - 匿名函数

提出 在匿名函数出现之前,所有的函数都需要先命名才能使用 functionincrement($value) { return$value+1; } array_map('increment',[1

PHP 核心特性 - 错误处理

错误与异常 错误,可以理解程序本身的错误,例如语法错误。而异常则更偏向于程序运行不符合预期或者不符合正常流程;对于PHP语言而言,处理错误和处理异常使用的机制完全不同,因此很容易让人产生困惑。 例如,

详解IBM i 操作环境的最新版本IBM i 7.4 和新特许程序 IBM Db2 Mirror for i

一、背景随着行业客户大规模上云的趋势越来越明显,Power在企业云化中将扮演越来越重要的角色。过去一年,浪潮商用机器基于开放的Power技术的服务器,完善服务器的生态系统,建立可持续发展的服务器业务,

五种拥有光明发展前景的新兴编程语言

在软件项目与具体实现层面,我们需要考虑众多具体因素。但无论从哪种角度出发,技术栈的选择永远是决定项目成功与否的核心因素之一。根据您的实际应用需求、站点或者产品设计思路,不同的编程语言往往能够带来不同的

Git教程_3.2 Git 分支 - 分支的新建与合并

分支的新建与合并 让我们来看一个简单的分支新建与分支合并的例子,实际工作中你可能会用到类似的工作流。你将经历如下步骤: 开发某个网站。 为实现某个新的需求,创建一个分支。 在这个分支上开展工作。

架构转型先行——金融业务场景下的新一代架构实践

  赵勇中国农业银行研发中心架构管理办公室主任工程师中国农业银行研发中心架构管理办公室主任工程师,十年以上金融行业信息化架构设计与管控经验。历经互联网金融、两地三中心、分布式核心银行等大型银行系统工程

解读 KubeCon EU 2019 应用管理领域的新看点

作者 |阿里云智能事业群技术专家邓宏超划重点阿里云容器平台技术专家、原CoreOS公司工程师、K8sOperator项目的核心作者之一邓洪超,精彩解读KubeConEU2019“应用管理“领域精华内容

十岁微博的新焦虑

2019年,微博成立整整10年,当我们看到#微博十年#这个热搜话题时,控制不住的回忆在脑海里开始徘徊。这10年里,微博曾以迅雷不及掩耳之势的速度成长。微博2019年Q2财报显示,第二季度净营收4.32

软件定义一切,企业数字化背景下的新一代IT基础架构

 在数字经济飞速发展的背景下,企业数字化转型已经成为目标共识,企业需要建立更敏捷、智能、安全和可控的数字化转型平台,而云为这一切提供了便利条件。  软件定义作为云的一项重要技术,这几年的也变得越发火热

浅析 PHP7 的垃圾回收机制

垃圾回收机制 垃圾回收机制是一种动态存储分配方案。它会自动释放程序不再需要的已分配的内存块。自动回收内存的过程叫垃圾收集。垃圾回收机制可以让程序员不必过分关心程序内存分配,从而将更多的精力投入到业务逻

浅析 PHP7 底层运行机制

PHP7代码执行过程 PHP是解释型语言,其执行过程需先编译成中间代码,再经由特定的虚拟机,翻译成特定的指令被执行。其执行过程如下: PHP代码=>Token=>抽象语法树=>Opcodes=>执行

浅析 PHP7 底层运行机制

PHP7代码执行过程 PHP是解释型语言,其执行过程需先编译成中间代码,再经由特定的虚拟机,翻译成特定的指令被执行。其执行过程如下: PHP代码=>Token=>抽象语法树=>Opcodes=>执行

docker 安装 Laravel 环境 (nginx mariadb PHP7.3)

1,安装mariadb创建网路dockernetworkcreate--subnet=172.18.0.0/16mynetworkdockerrun-d-p3306:3306-eMYSQL_ROOT_

Golang语言的主要特性与发展的环境和影响因素

1.2.1影响Go语言发展的早期编程语言 正如“21世纪的C语言”这句话所说,Go语言并不是凭空而造的,而是和C++、Java和C#一样属于C系。不仅如此,设计者们还汲取了其它编程语言的精粹部分融入

基础信息:MySQL 特性

MySQL数据库的优缺点: 关系型数据库管理系统(RDBMS):MySQL是一个典型的关系型数据库管理系统。 易用:MySQL很容易上手。只要你掌握一些简单的SQL知识,就可以构建SQL语句与My

Redis 的特性

以下是Redis的主要功能列表: 速度:Redis将整个数据集存储在主内存中,这就是为什么它非常快的原因。它的加载速度高达110,000个SET/秒,并且可以在入门级Linux机器中检索到81,000

甲骨文将自动化的安全特性植入云中!

在一年一度的OpenWorld大会上,甲骨文公司重点介绍了自治Linux、合作伙伴生态,以及在云计算领域的新功能扩展,包括云的可访问性,更严格的安全选项,虚拟基础设施层面的改进,向系统注入更多的智能化

Android兼容Java 8语法特性的原理分析

本文主要阐述了Lambda表达式及其底层实现(invokedynamic指令)的原理、Android第三方插件RetroLambda对其的支持过程、Android官方最新的dex编译器D8对其的编译支

Python 面向对象 OOP-三大特性笔记

面向对象的三大特性:封装,继承,多态 封装 封装就是使用特殊的语法,对成员属性和成员方法进行包装,达到保护和隐藏的目的但是一定注意,不能把成员全部封装死,就失去意义了被封装的成员主要是供类的内部

Python 面向对象 OOP-三大特性笔记

面向对象的三大特性:封装,继承,多态 封装 封装就是使用特殊的语法,对成员属性和成员方法进行包装,达到保护和隐藏的目的但是一定注意,不能把成员全部封装死,就失去意义了被封装的成员主要是供类的内部