PHP8.0新特性全面解析及公益免费直播课预告,本周四晚八点开播

本文的主要内容是PHP8.0的主要新功能。

PHP8.0新特性全面解析及公益免费直播课预告,本周四晚八点开播

预告片:PHP8公共福利免费现场课程将于本周四晚上8点开始,请继续关注!前言

PHP8于2020年11月26日正式发布,另一个里程碑到达。

根据官方网站上的信息,它已发布到8.0.2版,但许多项目仍在5.6版上。

卡卡将分析PHP8.0的新功能。

1。下载小型皮革面板的PHP8

由于您必须学习新功能,因此必须先下载它。

卡卡的本地环境一直用于phpstudy。目前,PHP版本仅提供7.4。

打开PHP的官方网站地址,然后选择下载窗口。

注意:以上是我自己的手册DIY,这有点麻烦。因此,PHP中国网站开发了一种支持PHP8的集成环境工具。

下载方式

然后单击Kaka Circle中的此下载。

PHP源代码下载

下载的源代码可以直接放置到d:\ phpstudy_pro \ Extensions \ PHP

然后只给文件一个名称,卡卡是根据phpstudy的目录结构编写的

PHP目录结构

然后跳到面板的PHP环境,为PHP8设置环境

设置PHP环境

访问!

PHP8.0环境配置2。部分下载PHP8将出现502解决方案

如果您下载PHP8,它也会根据卡卡进程执行,但在面试时返回502。

因此,不用担心,如果您发现PHP无法成功运行,这只是一个小问题。

使用CMD进入PHP8目录,执行PHP -V命令,如果以下情况显示Kaka表示可以解决此问题。

发生以下错误,因为vcruntime140.dll与PHP版本不兼容

PHP Warning:  'C:\Windows\SYSTEM32\VCRUNTIME140.dll' 14.0 is not compatible with this PHP build linked with 14.28 in Unknown on line 0

解决这个问题也很简单。 Kaka已下载该软件,单击并直接下载。

下载后,直接打开安装,然后重新启动计算机。

如果您不使用Kaka提供的安装程序包,也可以直接下载官方网站。

输入官方网站后,将其拉到底部,有一个工具和框架,然后单击要下载的工具和框架。

下载软件III。简介功能

版本更新迭代将具有新功能,并且将放弃一些旧功能。

让我们来谈谈哪些新功能php8.0带来!

1。联合类型

关于组合类型的特征实际上,它是在PHP7中实现的,但在注释的形式中。

现在看看两者之间的区别。下图来自PHP的官方网站。

这张照片来自PHP的官方网站

设置参数类型后,如果设置了PHP8的类型,则传递类型和预设类型不会直接报告错误。

PHP8组合类型

错误信息

但是,PHP7不同。尽管类型是预设的,但可以在非相应类型中执行。

PHP7执行结果

此功能可用于限制参数类型并更好地过滤参数。

2。匹配表达式

此功能类似于PHP7的开关语句。

1。匹配匹配单值

与开关隐藏休息相比



$name = match(2) {
    1 => 'kaka',
    2 => 'niuiniu',
};

echo $name;  // niuiniu

2。匹配多个条件



$method = $_SERVER['REQUEST_METHOD'];

match($method) {
    'post' => $this->handlePost(),
    'get','put' =>  $this->handleGet(),
};

3。默认值

开关默认有相同的属性



$name = match(3) {
    1 => 'kaka',
    2 => 'niuniu',
    default => 'heihei',
};

echo $name;  // heihei

4。如果未设置默认值,将报告错误

如果未设置默认值,则会报告一个错误



$name = match(3) {
    1 => 'kaka',
    2 => 'niuniu',
};

echo $name;  // Uncaught UnhandledMatchError: Unhandled match value of type int

5。强制性类型匹配

默认强制性类型匹配,以下代码匹配值是int,但是搜索值是字符串3,因此您将直接转到默认值



$name = match(3) {
    1 => 'kaka',
    2 => 'niuniu',
    "3" => 'niuniu',
    default => 'zero',
};

echo $name;  // zero

3。无效安全新动机特征

此功能将非常有效地解决代码的冗余。

在PHP7中,有时会有许多有条件的类属性判断,如下所示



class Person{

    public $user;
    public $country;

    public function __construct(){
        $this->user = $this;
        $this->country='yes';
    }

    public function getAddress(){
        return $this;
    }
}

$session=new Person();

if($session!==null){
    $user = $session->user;

    if($user!==null){
        $address = $user->getAddress();

        if($address!=null){
            $country = $address->country;

            if($country!==null){
                var_dump($country);
            }
        }
    }
}

以上代码返回结果是字符串(3)“是”

但是在PHP8中,该代码冗余的问题完美解决了问题

PHP8代码

代码



class Person{

    public $user;
    public $country;

    public function __construct(){
        $this->user = $this;
        $this->country='yes';
    }

    public function getAddress(){
        return $this;
    }
}

$session=new Person();

echo $session?->user?->getAddress()?->country;

相同的返回结果是字符串(3)“是”

您可以看到可以在PHP8中使用一行代码来实现PHP7的7行代码,不是很好吗?

4。提高建设性函数属性

PHP7施工功能代码



class User {
    public string $kaka;
    public function __construct(string $kaka) {
        $this->kaka = $kaka;
    }
}

PHP8施工功能代码



class User {
    public function __construct(public string $kaka;)
    
{
        echo $this->kaka;
    }
}

5。注意

在编写了这些功能之后,新添加的注释感到在编写这些功能后,这不是很有用。据估计它仍然很碗。

但是,对于文章的完整性,我仍然为您编写。

该代码直接打开,使用以下代码获得了PHP7获得代码的注释。



class User {
    /**
     * @api http://www.kaka.com/api
     */

    function show($name){}

}

$re=new ReflectionClass(new User);

$doc = $re->getMethod('show')->getDocComment();

$res=substr($doc, strpos($doc, "@api") + strlen("@api "),-2);

var_dump($res); // string(32) "http://www.kaka.com/api "

上述代码中的几个字符串的操作被使用。假设评论不是标准化的,则错误的可能性不如您编写代码。

由于存在这样的问题,因此官员为我们解决了这个问题,然后看一下它在PHP8中的写作。



#[api("http://www.kaka.com/api")]
function show($name){}

$ref=new ReflectionFunction("show");
$attr=$ref->getAttributes("api")[0];
$name=$attr->getName();
$value=$attr->getArguments();

var_dump($value[0]);// string(24) "http://www.kaka1.com/api"


我没有说班级的注释。如果您有兴趣,可以访问官方网站以检查相关信息。

6。名称参数

关于PHP8命名参数的最后一点

例如,所有位置参数均在PHP7中使用,如下所示。

也就是说,您传达的参数是该方法收到的位置。



class User {

    public function paramTest ($name,$age)
    
{
        var_dump($name.$age);
    }

}

$user = new User();

$user->paramTest('咔咔',24); // string(8) "咔咔24"


然后将新功能添加到php8,即命名参数,如下所示

与上述代码不同,当方法传递时,每个参数都会命名,但是名称只能是一个没有$的参数。

就代码的维护而言,在维护代码方面没有任何优势。我们不知道该设计什么!



class User {

    public function paramTest ($name,$age)
    
{
        var_dump($name.$age);// string(8) "24咔咔"
    }

}

$user = new User();

$user->paramTest(age: '咔咔',name: 24);

但是在参数中,它仍然具有赞美,即可变参数,类似于shices

但是要注意的一件事是,如果使用变量参数,则在传递时不能使用位置参数,并且需要使用所有命名参数。



class User {

    public function paramTest ($name,$age,...$other)
    
{
        var_dump($other);
        // array(2) { ["sex"]=> int(1) ["like"]=> string(6) "篮球" }
    }

}

$user = new User();

$user->paramTest(age: '咔咔',name: 24,sex:1,like:"篮球");




第四,摘要

你可能想看:
« 上一篇
下一篇 »

相关推荐

php实时推送,php实地培训

2026年10月05日

53阅读

php乱码出现问号的原因,php乱码出现问号的原因有哪些

2026年10月05日

44阅读

php一句话木马,一句话木马ctf

2026年10月05日

48阅读

php获取数组长度,php中如何获取数组的长度

2026年10月05日

50阅读

php面试题库及答案,php程序员面试真题库

2026年10月05日

47阅读

phpcontent-type修改,php源码二次修改需要多少钱

2026年10月05日

42阅读