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, );
$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.