PHP 8.2 Comes with Functional and Performance Improvements

PHP 8.2 was released, bringing read-only classes, new standalone types, a new random extension, and deprecated dynamic properties.

Regarding web applications, PHP is one of the greatest programming languages. It is a dynamic, general-purpose scripting language that is used in the development of server-side applications.

Leading CMS platforms such as WordPress, Joomla, Drupal, Magento, and others, which provide the majority of web content on the Internet, are built using PHP. That is why each new version generates great attention and response among web developers.

Although minor, the recently released PHP 8.2 version introduces some significant changes to PHP’s journey toward its modernization.

What’s New in PHP 8.2 Scripting Language

One year after the release of the previous PHP 8.1 version, PHP 8.2 is here with another dose of new features. So let’s look at them.

Readonly Classes

PHP 8.1 introduced the readonly properties. With readonly classes, PHP 8.2 takes readonly properties much further. Previously, you could create a class and define all the properties as readonly. So far, so good, but doing this can be time-consuming.

PHP 8.2 introduced a significantly better solution to this problem – readonly classes. So, when you declare a class as readonly, all properties within it are readonly from that point on.

For example, instead of writing this:

class LinuxDistros
{
    public function __construct(
        public readonly string $name, 
        public readonly string $package_manager,
        public readonly DateTimeImmutable $last_release_date,
    ) {}
}Code language: PHP (php)

You can now write the following:

readonly class LinuxDistros
{
    public function __construct(
        public string $name, 
        public string $package_manager,
        DateTimeImmutable $last_release_date,
    ) {}
}Code language: PHP (php)

It is important to note that you can only extend from readonly classes provided the child class is also readonly.

New Standalone Types

Before PHP 8.2, it was only possible to use null, false, and true as parts of union types. So, if you tried declaring them as standalone types, it resulted in a fatal error. However, PHP 8.2 now supports using null, false, and true as standalone types.

function returnFalse(): false
{
    return false;
}Code language: JavaScript (javascript)

The same logic and applicability also apply to true and null. In other words, precisely declaring the return, parameter, and property types make PHPโ€™s type system more expressive and complete.

New Random Extension

Historically, PHP has always supported a variety of Random Number Generators (RNGs) with varying degrees of performance, use cases, and appropriateness for secure applications.

PHP 8.2 introduces a new random number generator that addresses many issues with the previous one: it is more performant and secure. Randomizer is a new class that accepts a randomizer engine.

use Random\Randomizer;
$randomizer = new Randomizer();
$randomizer->shuffleBytes('BTW I Use Arch');Code language: PHP (php)

Of course, you’re not limited to strings. You can also randomize arrays, numbers, and so on.

$randomizer->shuffleBytes(['a', 'b', 'c']);
$randomizer->getInt(0, 100);Code language: PHP (php)

Furthermore, depending on your requirements, you can change this engine.

Constants in Traits

A trait in PHP is a mechanism that allows developers to reuse methods from independent classes that exist in various inheritance hierarchies. Traits currently only allow the definition of methods and properties, but not constants.

However, in PHP 8.2, you can now use constants in traits.

trait Linux 
{
    public const CONSTANT = 1;
 
    public function distro(): int 
    {
        return self::CONSTANT;
    }
}Code language: PHP (php)

Other PHP 8.2 Highlights

The union and intersection types improved the language greatly. But PHP 8.2 adds even more to that. For example, the new disjunctive normal form (DNF) types allow you to combine union and intersection types while following a strict rule: intersection types must be grouped with brackets when combining union and intersection types.

PHP 8.2 also includes various deprecations. For example, ${} string interpolation and the utf8_encode and utf8_decode functions are now deprecated. So, when used, PHP will produce a deprecation notification, which should not interfere with adequately configured PHP applications but will be logged into the error log.

You can refer to the official announcement for detailed information about all changes in PHP 8.2.

Bobby Borisov

Bobby Borisov

Bobby, an editor-in-chief at Linuxiac, is a Linux professional with over 20 years of experience. With a strong focus on Linux and open-source software, he has worked as a Senior Linux System Administrator, Software Developer, and DevOps Engineer for small and large multinational companies.

Think You're an Ubuntu Expert? Let's Find Out!

Put your knowledge to the test in our lightning-fast Ubuntu quiz!
Ten questions to challenge yourself to see if you're a Linux legend or just a penguin in the making.

1 / 10

Ubuntu is an ancient African word that means:

2 / 10

Who is the Ubuntu's founder?

3 / 10

What year was the first official Ubuntu release?

4 / 10

What does the Ubuntu logo symbolize?

5 / 10

What package format does Ubuntu use for installing software?

6 / 10

When are Ubuntu's LTS versions released?

7 / 10

What is Unity?

8 / 10

What are Ubuntu versions named after?

9 / 10

What's Ubuntu Core?

10 / 10

Which Ubuntu version is Snap introduced?

The average score is 68%