首页 后端开发 PHP7 一起看看 PHP 7.x 各个版本的新特性

一起看看 PHP 7.x 各个版本的新特性

Feb 01, 2021 am 09:42 AM

一起看看 PHP 7.x 各个版本的新特性

PHP 7.x 各个版本的新特性

前言

上个月同事看见我写

$a = $a ?? '';
登录后复制

问我这个写法是什么,还有这样的写法?我说这是PHP7以上才有的写法,你不知道吗?他说不知道。

心里嘀咕了一下,打算开始写这篇博客。

PHP7 应该是除了基础之外,是一种现在的 PHP 。因为在PHP7 出现了,强类型定义,和一些语法上的写法,如 组合比较符, define() 可以定义数组等一些特性。下面开始正式介绍,从PHP7.0 开始介绍,以后出了新版本,也会在下面陆陆续续加上。
好了,我们开始

PHP 7.0

标量类型声明

什么是标量类型?

四种标量类型:
boolean (布尔型)
integer (整型)
float (浮点型, 也称作 double)
string (字符串)
两种复合类型:
array (数组)
object (对象)
资源是一种特殊变量,保存了到外部资源的一个引用。资源是通过专门的函数来建立和使用的。资源类型变量为打开文件、数据库连接、图形画布区域等的特殊句柄。
说的通俗一点,标量类型,就是定义变量的一个数据类型。

在php5中,有类名,接口,数组 和回调函数。在php中,增加了 符串(string), 整数 (int), 浮点数 (float), 以及布尔值 (bool)。下面我们来举例子,万事万物看例子

function typeInt(int $a){
    echo $a;}typeInt('sad');// 运行,他讲会报错 Fatal error: Uncaught TypeError: Argument 1 passed to type() must be of the type integer, string given
登录后复制

在这里,我们定义了$a 必须为int类型,如果 type 函数里面传了string 所以报错。让我们修改上述的代码就没错了

function typeString(string $a){
    echo $a;}typeString('sad'); //sad
登录后复制

返回值类型声明

关于函数的方法返回值可以定义,比如我某个函数必须要返回 int 类型,他就定死来返回 int ,如果你返回 string 则报错。如下

<?phpfunction returnArray(): array{

    return [1, 2, 3, 4];}print_r(returnArray());/*Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
)
*/
登录后复制

那当我们的定义了数组,返回了string或者其他类型呢?

那么他将会报错 比如

function returnErrorArray(): array
{

    return '1456546';
}

print_r(returnErrorArray());
/*
Array
Fatal error: Uncaught TypeError: Return value of returnArray() must be of the type array, string returned in 
*/
登录后复制

null 合并运算符

由于日常使用中存在大量同时使用三元表达式和 isset()的情况, 我们添加了null合并运算符 (??) 这个语法糖。如果变量存在且值不为NULL, 它就会返回自身的值,否则返回它的第二个操作数。

<?php

$username = $_GET[&#39;user&#39;] ?? &#39;nobody&#39;;
//这两个是等效的  当不存在user 则返回?? 后面的参数

$username = isset($_GET[&#39;user&#39;]) ? $_GET[&#39;user&#39;] : &#39;nobody&#39;;

?>
登录后复制

太空船操作符

// 整数echo 1 <=> 1; // 0 当左边等于右边的时候,返回0echo 1 <=> 2; // -1  当左边小于右边,返回-1echo 2 <=> 1; // 1  当左边大于右边,返回1// 浮点数echo 1.5 <=> 1.5; // 0echo 1.5 <=> 2.5; // -1echo 2.5 <=> 1.5; // 1
 // 字符串echo "a" <=> "a"; // 0echo "a" <=> "b"; // -1echo "b" <=> "a"; // 1
登录后复制

define 定义数组

在PHP7 以前的版本 define 是不能够定义数组的 现在是可以的 比如

define('ANIMALS', [
    'dog',
    'cat',
    'bird'
]);

echo ANIMALS[1]; // 输出 "cat"
登录后复制

use 方法批量导入

// PHP 7 之前的代码use some\namespace\ClassA;use some\namespace\ClassB;use some\namespace\ClassC as C;use function some\namespace\fn_a;use function some\namespace\fn_b;use function some\namespace\fn_c;use const some\namespace\ConstA;use const some\namespace\ConstB;use const some\namespace\ConstC;// PHP 7+ 及更高版本的代码use some\namespace\{ClassA, ClassB, ClassC as C};use function some\namespace\{fn_a, fn_b, fn_c};use const some\namespace\{ConstA, ConstB, ConstC};
登录后复制

###Unicode codepoint 转译语法

echo "\u{aa}"; //ªecho "\u{0000aa}";  //ª  echo "\u{9999}"; //香
登录后复制

匿名类

<?phpinterface 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;$app->setLogger(new class implements Logger {  //这里就是匿名类
    public function log(string $msg) {
        echo $msg;
    }});
登录后复制

PHP 7.1

可为空类型

参数以及返回值的类型现在可以通过在类型前加上一个问号使之允许为空。 当启用这个特性时,传入的参数或者函数返回的结果要么是给定的类型,要么是 null 。

<?phpfunction testReturn(): ?string{
    return &#39;elePHPant&#39;;}var_dump(testReturn()); //string(10) "elePHPant"function testReturn(): ?string{
    return null;}var_dump(testReturn()); //NULLfunction test(?string $name){
    var_dump($name);}test(&#39;elePHPant&#39;); //string(10) "elePHPant"test(null); //NULLtest(); //Uncaught Error: Too few arguments to function test(), 0 passed in...
登录后复制

void

增加了一个返回void的类型,比如

<?phpfunction swap(&$left, &$right) : void{
    if ($left === $right) {
        return;
    }

    $tmp = $left;
    $left = $right;
    $right = $tmp;}$a = 1;$b = 2;var_dump(swap($a, $b), $a, $b);
登录后复制

多异常捕获处理

这个功能还是比较常用的,在日常开发之中

<?php
try {
    // some code
} catch (FirstException | SecondException $e) {  //用 | 来捕获FirstException异常,或者SecondException 异常
  
}
登录后复制

PHP 7.2

PHP7.2是PHP7系列 最少的新特性了

###允许分组命名空间的尾部逗号
比如

<?phpuse Foo\Bar\{
    Foo,
    Bar,
    Baz,};
登录后复制

允许重写抽象方法

<?phpabstract class A{
    abstract function test(string $s);}abstract class B extends A{
    // overridden - still maintaining contravariance for parameters and covariance for return
    abstract function test($s) : int;}
登录后复制

新的对象类型

<?phpfunction test(object $obj) : object  //这里 可以输入对象{
    return new SplQueue();}test(new StdClass());
登录后复制

PHP 7.3

PHP7.3 在语法层面没有什么很大的改变。

PHP 7.4

类属性支持类型声明

恭喜 PHP 往强类型又迈了一步

<?phpclass User {
    public int $id;
    public string $name;}?>
登录后复制

箭头函数

箭头函数提供了用于使用隐式按值作用域绑定定义函数的简写语法。与 JS 的箭头函数差不多,不过要带个 fn。吐槽一波

<?php$factor = 10;$nums = array_map(fn($n) => $n * $factor, [1, 2, 3, 4]);// $nums = array(10, 20, 30, 40);?>
登录后复制

Null 合并运算符支持方法

<?php$array[&#39;key&#39;] ??= computeDefault();// 类似与这个if (!isset($array[&#39;key&#39;])) {
    $array[&#39;key&#39;] = computeDefault();}?>
登录后复制

我是农场主,一个平时写代码复制粘贴的码农。

推荐(免费):PHP7

以上是一起看看 PHP 7.x 各个版本的新特性的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

PHP7有哪些版本引入了新的操作符 PHP7有哪些版本引入了新的操作符 Mar 03, 2025 pm 04:37 PM

本文详细介绍了PHP 7的新运营商:无效的(??),太空飞船(&lt; =&gt;)和无效的合并分配(?? =)操作员。 这些通过简化零检查和比较来增强代码的可读性和性能

PHP7不同版本对内存消耗有什么影响 PHP7不同版本对内存消耗有什么影响 Mar 03, 2025 pm 04:35 PM

PHP 7的次要版本差异产生微妙的记忆消耗变化。 尽管较新的版本通常通过Zend Engine和垃圾收集优化提高了性能和存储效率,但影响依赖于应用程序。 象征

如何优化PHP7代码以提高性能 如何优化PHP7代码以提高性能 Mar 03, 2025 pm 04:28 PM

本文研究了优化性能的PHP7代码。 它解决了常见的瓶颈,例如效率低下的数据库查询,I/O操作和内存泄漏。 解决方案包括有效的编码实践,数据库和缓存策略,异步

如何在PHP 7中有效使用会议? 如何在PHP 7中有效使用会议? Mar 10, 2025 pm 06:20 PM

本文详细介绍了有效的PHP 7会话管理,涵盖了session_start(),$ _Session,session_destroy()和安全cookie处理等核心功能。 它强调了安全性最佳实践,包括HTTP,会话ID再生,S

PHP7的版本更新主要修复了哪些bug PHP7的版本更新主要修复了哪些bug Mar 03, 2025 pm 04:36 PM

PHP 7通过解决众多错误,提高性能和增强安全性,从而显着改善了以前的版本。 密钥改进包括重写的Zend Engine 3,优化的内存管理和精制错误处理。而基因

如何使用New Relic等工具监视PHP 7的性能? 如何使用New Relic等工具监视PHP 7的性能? Mar 10, 2025 pm 06:28 PM

本文解释了如何使用新遗物监视PHP 7应用程序性能。 它详细详细介绍了新的Relic的设置,关键绩效指标(KPI),例如APDEX分数和响应时间,通过交易轨迹的瓶颈标识和错误轨迹

PHP7版本更新对session处理有什么影响 PHP7版本更新对session处理有什么影响 Mar 03, 2025 pm 04:31 PM

本文研究了PHP7中的会话处理,强调了增强的Zend引擎的性能提高。 它讨论了潜在的兼容性问题,从升级和详细信息优化策略的安全性和可伸缩性。

如何从PHP 5.6升级到PHP 7? 如何从PHP 5.6升级到PHP 7? Mar 10, 2025 pm 06:29 PM

本文详细介绍了将PHP 5.6升级为PHP 7,强调了备份,检查服务器兼容性以及选择升级方法(软件包管理器,编译,控制面板或Web服务器配置)等关键步骤。 它解决了Potentia

See all articles