前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP8.0 新特性

PHP8.0 新特性

作者头像
caoayu
发布2020-11-05 10:14:11
6600
发布2020-11-05 10:14:11
举报
文章被收录于专栏:caoayu的分享

PHP8.0

目前php8.0还在测试阶段.正式版大概12月份出来.先来看一下新版本的改进或新特性.

1. 更方便的获取类名

之前的版本

代码语言:javascript
复制
class User {
    
}
$className = User::class; 

// or 
$user = new User();
get_class($user);

新版本

代码语言:javascript
复制
class User {
    
}
$user = new User();
$className = $user::class;

2. 新增字符串函数

对于字符串的一些操作.

之前的版本

代码语言:javascript
复制
// 1. 字符串中是否包含某个字符串
$str = 'Hello world!';
if (strpos($str,"world") !== false){
    echo "Found";
}
// 2. 字符串是否以某个字符串开头
$found = 'Hello';
if (substr($str,0,count($found)) == $found){
    echo 'Yes';
}
// 3. 字符串是否以某个字符串结尾
if (substr($str,-count($found),count($found)) == $found){
    echo 'Yes';
}

新版本

代码语言:javascript
复制
// 1. 字符串中是否包含某个字符串
$str = 'Hello world!';
if (str_contains($str,"world")){
    echo 'Found';
}
// 2. 字符串是否以某个字符串开头
if (str_starts_with($str,"Hello")){
	echo 'Yes';
}
// 3. 字符串是否以某个字符串结尾
if (str_end_with($str,'Hello')){
    echo 'Yes';
}

对比: 新版本会更加方便.更加语义化.表达的意思更加清晰.

3. 构造方便更精简

旧版本

代码语言:javascript
复制
class User{
    public $name;
    public function __construct($name){
        $this->name = $name;
    }
}
$user = new User("lisa");
$user->name; 

新版本

代码语言:javascript
复制
class User{
    public function __construct(public $name){
        
    }
}
$user = new User("lisa");
$user->name; 

4. 箭头函数支持异常捕捉

旧版本

代码语言:javascript
复制
$fn = fn() => 'ABC';
$fn();

$ex = fn() => throw new Exception(); // error

新版本

代码语言:javascript
复制
$fn = fn() => 'ABC';
$fn();

$ex = fn() => throw new Exception(); 

try{
    $ex();
}catch(Exception){
    echo 'Failed';
}

对比: 修复了箭头函数对异常的处理.并且可以去点捕捉异常时的参数名 $exception(如果没有用到这个变量)

5. null 空值安全检查

旧版本

代码语言:javascript
复制
class User{
    public function __construct(public $name){
        
    }
}
class Auth {
    public function user(){
        return new User('lisa');
    }
}
$auth = new Auth();

$auth->user()->name; // error
// if new User return null;
if($auth->user()){
    $auth->user()->name; // ok
}
// or 
$auth->user()?$auth->user()->name:null; //ok

新版本

代码语言:javascript
复制
class User{
    public function __construct(public $name){
        
    }
}
class Auth {
    public function user(){
        return new User('lisa');
    }
}
$auth = new Auth();

$auth->user()?->name;

6. 联合数据类型-支持联合类型

旧版

代码语言:javascript
复制
class TV{
    
}
class PC{
    
}
function fix(TV $it){
    echo 'I fix it'
}
fix(new Tx); // ok
fix(new PC); // error

新版

代码语言:javascript
复制
class TV{
    
}
class PC{
    
}
function fix(TV|PC $it){
    echo 'I fix it'
}
fix(new Tx); // ok
fix(new PC); // ok
// 关于返回值
function fix(TV|PC $it) : string| int {
    // return string or int is ok
}
// mixed 类型代表了包括null 空的所有类型.只能单独使用
function fix(TV|PC $it) :mixed {
    // you can return all type
}
// ok method ? 表示可以返回指定的值和null
function fix(TV|PC $it) ?:stirng {
    // you can return string or null 
}
// error method
function fix(TV|PC $it) ?:mixed {
    // you can return all type
}

7. match 表达式进行逻辑判断 – 简化 switch

8. 函数参数命名传递 – 传递参数更随意.不在意默认值跟参数顺序

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-11-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • PHP8.0
    • 1. 更方便的获取类名
      • 2. 新增字符串函数
        • 3. 构造方便更精简
          • 4. 箭头函数支持异常捕捉
            • 5. null 空值安全检查
              • 6. 联合数据类型-支持联合类型
                • 7. match 表达式进行逻辑判断 – 简化 switch
                  • 8. 函数参数命名传递 – 传递参数更随意.不在意默认值跟参数顺序
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档