PHP7新特性简述

发布时间 - 2026-01-11 01:49:38    点击率:

类型声明

看代码,一目了然了。

class person
{
  public function age(int $age) : string
  {
    return 'Age is ' . $age;
  }
}

命名空间与use关键字批量声明

非混合模式

use Publishers\Packt\{ Book, Ebook, Video};
use function Publishers\Packt\{ getBook, saveBook };
use const Publishers\Packt\{ COUNT, KEY };

混合模式

use Publishers\Packt\{
  Book,
  Ebook,
  Video,
  function getBook,
  function saveBook,
  const COUNT,
  const KEY
};

复合模式

use Publishers\Packt\{
  Paper\Book,
  Electronic\Ebook,
  Media\Video
};

匿名类

匿名类的声明与使用时同时进行的,具备其他类所具备的所以功能,区别在于匿名类没有类名。语法如下:

new class(argument) { definition };

匿名类是没有类名的,但在PHP内部,会在内存的引用地址表中为其分配一个全局唯一的名称。

$name = new class('You') {
  public function __construct($name)
  {
    echo $name;
  }
};

匿名类可以继承父类及父类的方法。

class Packt
{
  protected $number;
  public function __construct()
  {
    echo 'parent construct';
  }
  public function getNumber() : float
  {
    return $this->number;
  }
}
$number = new class(5) extends Packt
{
  public function __construct(float $number)
  {
    parent::__construct();
    $this->number = $number;
  }
};
echo $number->getNumber();

匿名类可以继承接口。

interface Publishers
{
  public function __construct(string name, string address);
  public function getName();
  public function getAddress();
}
class packt
{
  protected $number;
  protected $name;
  protected $address;
  public function ...
}
$info = new class('name', 'address') extends Packt implement Publishers
{
  public function __construct(string $name, string $address)
  {
    $this->name = $name;
    $this->address = $address;
  }
  public function getName() : string
  {
    return $this->name;
  }
  public function getAddress() : string
  {
    return $this->address;
  }
}
echo $info->getName() . ' ' . $info->getAddress();

匿名类可以嵌套在一个类中使用。

class Math
{
  public $first_number = 10;
  public $second_number = 10;
  public function add() : float
  {
    return $this->first_number + $this->second_number;
  }
  public function mutiply_sum()
  {
    return new class() extends Math
    {
      public function mutiply(float $third_number) : float
      {
        return $this->add() * $third_number;
      }
    };
  }
}
$math = new Math();
echo $math->mutiply_sum()->mutiply(2);

摒弃老式构造函数

从PHP4开始,构造函数可以通过命名与类名一致的方式来声明自己是构造函数,在PHP7中这种方式声明构造函数依然可以使用,但不推荐使用,会输出不推荐的信息 Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; Packt has a deprecated constructor in ...,PHP7中推荐使用 __construct()。

throwable接口

从PHP7开始,程序中的fatal错误都可以被截获,PHP7提供了throwable接口,异常与错误都继承于这个接口。

Error

现在大多数的fatal错误情况会抛出一个error实例,类似于截获异常,error实例可以被try/catch截获。

try
{
  ...
} catch(Error $e)
{
  echo $e->getMessage();
}

一些错误情况只有error的子实例会被抛出,例如 TypeError、DivisionByZeroError、ParseError等。

<=>操作符

<=>操作符将==、<、>三个比较操作符打包在了一起,具体使用规则如下。

操作符两边相等时返回 0

操作符左边小于右边时返回 -1

操作符左边大于右边时返回 1

null合并运算符

?? 合并运算符,在第一操作数存在时可被直接返回,否则返回第二操作数。

$title = $post['title'] ?? NULL;
$title = $post['title'] ?? $get['title'] ?? 'No title';

uniform变量语法

$first = ['name' => 'second'];
$second = 'two';
echo $$first['name'];
echo ${Sfirst['name']}; // PHP7
...
echo $object->$methods['title'];
echo $object->{$methods['title']}; // PHP7

主要是因为PHP7与之前版本PHP的解析方式不一样,在PHP7中加上花括号就可以啦,就像上边代码这样,否则会报错。

常量数组

从PHP5.6开始常量数组可以用const关键字来声明,在PHP7中常量数组可以通过define函数来初始化。

const STORES = ['en', 'fr', 'ar']; // php5.6
define('STORES', ['en', 'fr', 'ar']); // php7

switch中的default默认值

在PHP7之前,switch语句中允许多个default默认值,从PHP7开始,只能有一个default默认值,否则会产生fatal级别错误。

// php7之前
switch (true) {
  case 'value':
    # code...
    break;
  default:
    # code...
    break;
  default:
    # code...
    break;
}
// php7
switch (true) {
  case 'value':
    # code...
    break;
  default:
    # code...
    break;
}

session_start函数中的选项数组

在PHP7之前,使用session的时候都必须先调用session_start()函数,且这个函数并没有参数需要传递,所有session相关的配置都在php.ini文件中,从PHP7开始,可以在调用这个函数时传递参数选项数组,这些设置信息将覆盖php.ini中的session配置。

session_start([
  'cookie_lifetime' => 3600,
  'read_and_close' => true
]);

unserialize函数引入过滤器

unserialize()可以反序列化任何类型的对象,没有任何过滤项,不安全,PHP7在unserialize()中引入了过滤器,且默认允许反序列化所有类型的对象。

$result = unserialize($object, ['allowed_classes' => ['Book', 'Ebook']]);

以上所述是小编给大家介绍的PHP7新特性简述,希望对大家有所帮助!


# php7  # 新特征  # 简述PHP7.4 新特性和废弃的功能  # php5.6.x到php7.0.x特性小结  # php7新特性的理解和比较总结  # PHP7新特性之抽象语法树(AST)带来的变化详解  # php7函数  # 声明  # 返回值等新特性介绍  # PHP7 新特性详细介绍  # PHP7新特性foreach 修改示例介绍  # 浅谈php7的重大新特性  # PHP7中新添特性整理  # 默认值  # 推荐使用  # 可以通过  # 则会  # 抛出  # 运算符  # 序列化  # 是因为  # 就像  # 都在  # 多个  # 没有任何  # 可以用  # 但在  # 会在  # 给大家  # 为其  # 可以使用  # 报错  # 但不 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何快速搭建高效服务器建站系统?  网站制作报价单模板图片,小松挖机官方网站报价?  b2c电商网站制作流程,b2c水平综合的电商平台?  零服务器AI建站解决方案:快速部署与云端平台低成本实践  详解Android图表 MPAndroidChart折线图  JavaScript如何实现音频处理_Web Audio API如何工作?  nginx修改上传文件大小限制的方法  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  nodejs redis 发布订阅机制封装实现方法及实例代码  Android利用动画实现背景逐渐变暗  如何确保西部建站助手FTP传输的安全性?  Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门  佛山网站制作系统,佛山企业变更地址网上办理步骤?  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  Laravel如何从数据库删除数据_Laravel destroy和delete方法区别  C#如何调用原生C++ COM对象详解  夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化  Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】  如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体  简单实现Android验证码  敲碗10年!Mac系列传将迎来「触控与联网」双革新  EditPlus中的正则表达式实战(5)  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  WordPress 子目录安装中正确处理脚本路径的完整指南  晋江文学城电脑版官网 晋江文学城网页版直接进入  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  如何快速重置建站主机并恢复默认配置?  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  如何在Ubuntu系统下快速搭建WordPress个人网站?  微信小程序 wx.uploadFile无法上传解决办法  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】  Laravel Admin后台管理框架推荐_Laravel快速开发后台工具  Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程  Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册  java ZXing生成二维码及条码实例分享  用v-html解决Vue.js渲染中html标签不被解析的问题  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】  Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】  如何在阿里云购买域名并搭建网站?  香港服务器租用费用高吗?如何避免常见误区?  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  如何确保FTP站点访问权限与数据传输安全?  Laravel事件监听器怎么写_Laravel Event和Listener使用教程  android nfc常用标签读取总结  为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】