Scout APM helps PHP developers pinpoint N+1 queries, memory leaks & more so you can troubleshoot fast & get back to coding faster. Start your free 14-day trial today.

PHP 8 in 8 code blocks

PHP 8 brings lots of new features, in this list we'll look at the most outstanding ones. If you want a full list and background information, you can read about all things new in PHP 8.


use Support\Attributes\ListensTo;

class ProductSubscriber
{
    #[ListensTo(ProductCreated::class)]
    public function onProductCreated(ProductCreated $event) { /* … */ }

    #[ListensTo(ProductDeleted::class)]
    public function onProductDeleted(ProductDeleted $event) { /* … */ }
}

Attributes — aka annotations — you can read about them in depth in this post.


public function foo(Foo|Bar $input): int|float;

public function bar(mixed $input): mixed;

Union types allows for type hinting several types. There's also a new mixed type which represents several types at once.


interface Foo
{
    public function bar(): static;
}

The static return type is built-in.


[JIT]
opcache.jit=1225

The just-in-time compiler for PHP.


$triggerError = fn() => throw new MyError();

$foo = $bar['offset'] ?? throw new OffsetDoesNotExist('offset');

throw can be used in expressions.


try {
    // Something goes wrong
} catch (MySpecialException) {
    Log::error("Something went wrong");
}

Non-capturing catches: no need to specify an exception variable if you don't need it.


setcookie(
    name: 'test',
    expires: time() + 60 * 60 * 2,
);

Named arguments.


$result = match($input) {
    0 => "hello",
    '1', '2', '3' => "world",
};

The match expression as an improvement to the switch expression.

Interested in more?

I'm writing a new series on how I manage and grow my blog called "Blogs for Devs". You might like the behind the scenes stories and also be inspired to start your own blog.

Check it out!

There's even more. If you want a full list, you can find it on this blog.

What feature are you looking forward to the most? Let me know on Twitter or via email.