首页 > 编程语言 >php8新特性

php8新特性

时间:2024-12-22 19:54:16浏览次数:5  
标签:function return 特性 echo RFC php8 str public

<?php
header("Content-type:text/html;charset=utf-8");
ini_set('error_reporting', E_ALL);
ini_set("display_errors", "On");//打开错误提示
ini_set('memory_limit', '-1');
set_time_limit(0);

//函数只接受整数或浮点数作为参数
function unionType(int|float $a, array|string $b = null) {
    var_dump($a);
    var_dump($b);
}

//Union Types(联合类型)
unionType(1);
unionType(1.52);
//unionType("abcd"); //这条会报Fatal error
echo "\n";

//Named Arguments(命名参数)
unionType(a:1, b:"aaa");
echo "\n";

//Match 表达式
echo match(0){
    'a' => 'aaa',
    'b' => 'bbb',
    'c' => 'ccc',
    default => '000',
};

echo match("c"){
    'a' => 'aaa',
    'b' => 'bbb',
    'c' => 'ccc',
    default => '000',
};
echo "\n";
echo "\n";

//Nullsafe 运算符(Nullsafe operator)
class A{
    public $a = null;
    public $b = null;
    function seta(string $a){
        $this->a = $a;
        return $this;
    }
    function geta(){
        echo $this->a;
        return $this;
    }
    function setb(string $b){
        $this->b = $b;
        return $this;
    }
    function getb(){
        echo $this->b;
        return $this;
    }
}
(new A())?->seta("123")?->geta();
echo (new A())?->setb("456")?->b;
echo "\n";
echo "\n";

//构造器属性提升
class Point {
    public function __construct(
        public float $x = 0.0,
        public float $y = 0.0,
        public float $z = 0.0,
        ) {}
}

echo (new Point(6.9, 5.8, 4.7))->x;
echo "\n";
echo "\n";

//字符串与数字的比较更符合逻辑
var_dump(0 == 'foobar'); // false
echo "\n";
echo "\n";

//注解(attributes)
class PostsController{
    #[Route("/api/posts/{id}", methods: ["GET"])]
    public function get($id) {
        /* ... */
    }
}

//PHP 8 还有很多其他改动,在这里有详细的说明:https://www.php.net/releases/8.0/zh.php
//其中新增了 3 个函数实用的函数:str_contains()、str_starts_with() 和 str_ends_with()。
var_dump(str_contains("abc", "b"));
var_dump(str_starts_with("abc", "a"));
var_dump(str_ends_with("abc", "c"));

//内部函数类型错误的一致性
//strlen([]); // TypeError: strlen(): Argument #1 ($str) must be of type string, array given
//array_chunk([], -1); // ValueError: array_chunk(): Argument #2 ($length) must be greater than 0


//即时编译
//PHP 8 引入了两个即时编译引擎。 Tracing JIT 在两个中更有潜力,它在综合基准测试中显示了三倍的性能, 并在某些长时间运行的程序中显示了 1.5-2 倍的性能改进。 
//典型的应用性能则和 PHP 7.4 不相上下。

/*
类型系统与错误处理的改进
算术/位运算符更严格的类型检测 RFC
Abstract trait 方法的验证 RFC
确保魔术方法签名正确 RFC
PHP 引擎 warning 警告的重新分类 RFC
不兼容的方法签名导致 Fatal 错误 RFC
操作符 @ 不再抑制 fatal 错误。
私有方法继承 RFC
Mixed 类型 RFC
Static 返回类型 RFC
内部函数的类型 Email thread
扩展 Curl、 Gd、 Sockets、 OpenSSL、 XMLWriter、 XML 以 Opaque 对象替换 resource。
*/

/*
其他语法调整和改进
允许参数列表中的末尾逗号 RFC、 闭包 use 列表中的末尾逗号 RFC
无变量捕获的 catch RFC
变量语法的调整 RFC
Namespace 名称作为单个 token RFC
现在 throw 是一个表达式 RFC
允许对象的 ::class RFC

新的类、接口、函数
Weak Map 类
Stringable 接口
str_contains()、 str_starts_with()、 str_ends_with()
fdiv()
get_debug_type()
get_resource_id()
token_get_all() 对象实现
New DOM Traversal and Manipulation APIs
*/

  输出:

int(1)
NULL
float(1.52)
NULL

int(1)
string(3) "aaa"

000ccc

123456

6.9

bool(false)


bool(true)
bool(true)
bool(true)

  

标签:function,return,特性,echo,RFC,php8,str,public
From: https://www.cnblogs.com/xuxiaobo/p/18622443

相关文章

  • 深刻理解JAVA8新特性
    相信每一位java面试者都会问一个问题,你知道jdk1.8新特性吗?当在回答这个问题的时候,我们都会说一大堆,比如说,可以支持lambda表达式,引入Optional类让开发开始手动检查null,避免运行时候的NPE等等,可是,对于一名java从业者来说,我觉得不够,没有说到点子上,如果面试官很水,当然就让你过啦,然......
  • Java 8 特性: Lambda 表达式、Stream API、Optional 类等
    Java8引入了很多新的特性,极大地增强了Java语言的表达能力和开发效率。以下是一些主要的新特性1.Lambda表达式Lambda表达式允许以更简洁的方式表示匿名函数,使得代码更加简洁和可读。它支持函数式编程风格,并可以作为参数传递给方法。语法:(parameters)->expres......
  • 第4章 C#的高级特性
    第4章C#的高级特性4.1委托4.1.2多播委托对值为null的委托变量进行+​或+=​操作,等价于为变量指定一个新值:SomeDelegated=null;d+=SomeMethod1;//等价于d=SomeMethod1委托是不可变的,因此调用+=​和-=​的实质是创建一个新的委托实例,并把它......
  • MySQL 8.0 新特性详解
    MySQL8.0引入了许多重要的功能和改进,这些特性显著提升了数据库的性能、可用性和开发体验。以下是MySQL8.0的主要新特性及其详细解析:降序索引支持MySQL8.0支持降序索引,而之前版本即使语法支持,实际仍为升序。通过降序索引,查询性能在某些场景中得到显著优化。示例CR......
  • css4你有听说过吗?你最期待的css4拥有什么样的新特性?
    实际上,"CSS4"并不是一个官方或广泛使用的术语。CSS(级联样式表)的发展是一个持续的过程,新的功能和属性会不断地添加到规范中,而不是按照版本发布。然而,为了简化交流,有时人们会用“CSS4”来指代未来可能出现的CSS新功能和改进。就我个人而言,我期待未来CSS的发展能包含以下特性:更强......
  • 只谈C++11新特性 - nullptr
    nullptr在C++11标准中,引入了nullptr关键字,用来表示空指针。这是对原有NULL的重要改进,提供了更强的类型安全性,并避免了一些常见的编程错误。1.nullptr的特点nullptr是一种新类型std::nullptr_t的常量,用于表示空指针。与NULL不同,nullptr具有明确的指针类型......
  • Python 高级特性:描述器(Descriptor)简介
    Python高级特性:描述器(Descriptor)简介原创 defr bebettercoder 2024年12月01日20:00 广东1.什么是描述器描述器(Descriptor)是Python中一个强大而优雅的特性,它允许我们自定义对象属性的访问方式。简单来说,描述器就是一个实现了描述器协议的类,这个协议包含 __get__......
  • 解析堡垒机:功能特性、优势劣势与类型一览
    堡垒机,又称运维审计系统、跳板机,是一种位于内部网络与外部网络之间的安全防护设备。核心功能身份认证:支持多种认证方式,如静态口令、动态口令、硬件key、生物特征等,还可与第三方认证服务器结合,确保只有合法用户能够登录。账号管理:对所有服务器、网络设备、安全设备等账号进行集......
  • 硬件工程师必看——电容特性
    1.电容两端的电压差不能突变注意这里说的是电压差而不是电压,电压是可以突变的。先让电容上端的电压为5V再断开开关让下端的开关为5v,可以发现上面的电压变成10v了,证明电容两端电压可以突变,但是电容的电压差不可以突变。2.电容的储能特性电容相当于一个小电池他是可以储......
  • 数据特性库 前言
    文章目录一、num-traits库简介二、核心功能三、更新功能四、使用方式五、应用示例六、结论一、num-traits库简介num-traits是Rust编程语言中的一个开源库,专注于为数值类型提供一系列的数学运算特性和接口。它支持泛型数学计算,允许开发者在不指定具体数字类型的情况......