Before we can play around, of course we must first download PHP 8. At the time of this writing, PHP 8 is not yet officially out. As such, we'll tap a custom Homebrew formula to make the installation process as painless as possible. Alternatively, you might consider using Docker or Vagrant to create an isolated environment for testing PHP 8.
First up on the agenda is the new Nullsafe operator. This operator - represented as a question mark - allows you to call a method on the result of any expression if it does not evaluate to null
. It sounds confusing, but it really isn't. Let's have a look.
Switch statements in PHP are useful, yet clunky. Think of the new match expression in PHP 8 as an improved switch. It's far more terse and flexible than its counterpart.
Next up is constructor property promotion, which allows you to remove much of the tedious class initialization boilerplate code that you likely write for every any that accepts a dependency.
This next one is a small, but useful addition to PHP 8 that received unanimous support during the voting stage. You now have the ability to use ::class
directly on an object. The result will be functionally identical to the result of get_class()
. In PHP 7 and below, this functionality was limited to the class, itself.
Next up, we have named parameters. This new PHP 8 feature allows you to pass function arguments according to, not their order, but the parameter name, itself. Let's discuss the pros and cons of adopting named parameters/arguments in your own projects.
It took a global pandemic for PHP to finally add a str_contains
helper function, but it's finally here (along with a few others). In this episode, we'll review str_contains()
, str_starts_with()
, and str_ends_with()
.
Weak maps are effectively key value stores that allow for garbage collection. You won't reach for these often, but they're nonetheless an important tool to have in your belt.
Next up, we'll discuss PHP 8's support for union types, as well as a new catch-all mixed
pseudo-type. We can now - without resorting to docblocks - specify that a method parameter may accept multiple types.
*Series still in development. Check back often for updates.