PHP 8具有许多新功能,在此列表中,我们将介绍最出色的功能。免责声明:上一篇PHP摘要的帖子中已经提供了英文链接。如果您足够了解该语言,那么可能值得翻阅原始语言,其他英语文章也有很多脚注。时间
use \Support\Attributes\ListensTo;
class ProductSubscriber
{
<<ListensTo(ProductCreated::class)>>
public function onProductCreated(ProductCreated $event) { }
<<ListensTo(ProductDeleted::class)>>
public function onProductDeleted(ProductDeleted $event) { }
}
属性而不是docblock。是的,我知道,语法可能不是您想要或希望的方式。也许您更喜欢@,@:或docblocks或其他东西。但是他就是那样。关于语法的唯一值得一提的是已经讨论了所有选项,并且选择此语法有很好的理由。您可以在RFC中阅读有关此内容的简短摘要,也可以在内部组件列表中阅读有关RFC的全部讨论。
二
public function foo(Foo|Bar $input): int|float;
public function bar(mixed $input): mixed;
组合类型允许您一次指定几种类型。还有一个新的混合类型,可以同时表示几种类型。
三
interface Foo
{
public function bar(): static;
}
您可以在返回类型中指定static。
四个
[JIT]
opcache.jit=5
内置JIT编译器。什么是准时制?“ JIT”代表“及时”-“在正确的时间”。您可能知道PHP是一种解释型语言:它不是用C,Java或Rust编译为程序的。取而代之的是,它在运行时转换为机器代码(处理器可以理解的机器代码)。“ JIT”是一种在运行时编译部分代码的方法,因此可以改用编译版本。将其视为运行时生成的解释代码的“缓存版本”。更详细的内容已写在哈布雷(Habré)上
五
$triggerError = fn() => throw new MyError();
$foo = $bar['offset'] ?? throw new OffsetDoesNotExist('offset');
throw可以在表达式中使用。
六
try {
} catch (MySpecialException) {
Log::error("Something went wrong");
}
如果不需要,可以省略异常变量。
七
public function(
string $parameterA,
int $parameterB,
Foo $objectfoo,
) {
}
您可以在参数列表的末尾指定一个逗号。
八
str_contains('string with lots of words', 'words');
str_starts_with('haystack', 'hay');
str_ends_with('haystack', 'stack');
新的字符串函数。我认为他们的名字说明了一切。让我们不要自欺欺人:8个代码块不足以概括PHP 8中的所有出色功能。因此,我们再添加几个。
九
function bar(Stringable $stringable) { }
一个新的Stringable接口,该接口会自动添加到实现__toString()方法的类中。
十
$object::class
直接从对象调用::类。