Running an outdated Laravel application? Get instant, automated Laravel upgrades with Laravel Shift

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
    public function onProductCreated(ProductCreated $event) { /* … */ }

    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.


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.

    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.

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.