PHP 8中的八段代码

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 {
    // Something goes wrong
} 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

直接从对象调用::类。



All Articles