大家好,我是yangyang.记录一点php8知识.
特性
- JIT (Just In Time) 编译器:这是PHP 8.0的最大改进,可以显著提升PHP的性能。
- 命名参数:这使得你可以只通过参数名来传递值,而不需要考虑参数在函数中的顺序。
- Attributes(或者叫Annotations):这是一种在代码中添加元数据的新方式。
- 构造函数属性提升:这允许你在一个步骤中声明类属性和构造函数。
- Match表达式:这是一个可以返回值的switch语句。
- Nullsafe操作符:这使得你可以在链式调用中安全地调用可能为null的方法或属性。
- 联合类型:这允许你在函数参数和返回值中声明多种可能的类型。
- 更严格的类型系统:PHP 8.0在类型系统方面进行了许多改进,包括更严格的类型检查和新的类型(如混合类型)。
- 新的字符串函数:PHP 8.0添加了一些新的字符串处理函数,如str_contains、str_starts_with和str_ends_with。
- 异常处理的改进:PHP 8.0对异常处理进行了一些改进,包括一些新的异常类和更好的错误消息。
以上只是PHP 8.0的一部分新特性,更详细的列表和说明可以在PHP官方网站上找到。
代码示例
- 命名参数:
phpfunction foo($a, $b, $c) { /* ... */ }
// 在PHP 8.0之前,你需要按照参数的顺序传递值
foo(1, 2, 3);
// 在PHP 8.0,你可以通过参数名来传递值
foo(a: 1, b: 2, c: 3);
- Attributes:
php// 在PHP 8.0,你可以使用Attributes来添加元数据
#[MyAttribute]
class Foo { /* ... */ }
- 构造函数属性提升:
php// 在PHP 8.0之前,你需要在构造函数中手动赋值
class Foo {
public function __construct(
private Bar $bar,
) { /* ... */ }
}
// 在PHP 8.0,你可以直接在构造函数中声明属性
class Foo {
public function __construct(
private Bar $bar,
) {}
}
- Match表达式:
php// 在PHP 8.0,你可以使用match表达式
$result = match($input) {
'foo' => "It's foo",
'bar' => "It's bar",
default => "It's something else",
};
- Nullsafe操作符:
php// 在PHP 8.0之前,你需要检查null
if ($foo !== null && $foo->bar() !== null) {
$result = $foo->bar()->baz();
}
// 在PHP 8.0,你可以使用nullsafe操作符
$result = $foo?->bar()?->baz();
- 联合类型:
php// 在PHP 8.0,你可以在函数参数和返回值中声明多种可能的类型
function foo(Bar|Baz $input): int|float { /* ... */ }
- 新的字符串函数:
php// 在PHP 8.0,你可以使用新的字符串函数
if (str_contains($haystack, $needle)) { /* ... */ }
if (str_starts_with($haystack, $needle)) { /* ... */ }
if (str_ends_with($haystack, $needle)) { /* ... */ }