PHP 8.4 has been released

by Nazmul Alam, Senior Developer

PHP 8.4: Unveiling the Latest Features and Enhancements

PHP 8.4 has arrived, bringing with it a suite of new features, improvements, and some exciting changes to the language. Here's a rundown of what's new:

Property Hooks

One of the standout features in PHP 8.4 is the introduction of property hooks. This feature allows developers to attach custom logic to property access and modification, enhancing control over object state changes without cluttering the class with numerous methods:

  • Before Property Read Hook: Executes before a property's value is read.
  • After Property Write Hook: Triggers after a property's value is modified.

This new addition promises to streamline code by reducing the need for getter and setter methods, making object-oriented programming in PHP more efficient and potentially more secure by controlling property access dynamically.

Asymmetric Visibility

PHP 8.4 introduces asymmetric visibility for properties, which means you can now have different visibility levels for reading and writing properties. This feature enhances encapsulation by allowing:

  • Public Read, Private Write: Allows external reading but restricts modification to within the class.
  • Private Read, Public Write: Permits external modification while keeping the reading internal.

This nuanced control over visibility provides developers with more granular control over how class properties interact with the rest of the program.

New #[Deprecated] Attribute

Deprecation is now more straightforward with the new #[Deprecated] attribute. This can be applied to functions, classes, or properties, offering a cleaner way to mark parts of the code for future removal or replacement:

#[Deprecated("Use newMethod() instead")]
public function oldMethod() {
    // ...
}

This helps in maintaining codebases by clearly signaling to developers when parts of the API should no longer be used.

Extended DOM API and HTML5 Support

The DOM extension in PHP 8.4 has been updated to support more HTML5 features:

New Methods: Like Element::closest(), Element::matches(), and Element::toggleAttribute(). HTML5 Elements: Enhanced support for HTML5 elements like <section>, <article>, <header>, etc.

These updates make PHP a more robust tool for web scraping and dynamic web content manipulation.

Object API for BCMath

The BCMath extension, which handles arbitrary precision mathematics, now includes an object-oriented interface. This makes operations with big numbers more intuitive and aligns with PHP's ongoing shift towards object-oriented paradigms:

$bigNumber = new BCMath('1234567890');
$anotherNumber = new BCMath('9876543210');
$sum = $bigNumber->add($anotherNumber);

Class Instantiation Without Parentheses

A subtle yet convenient update is the ability to instantiate classes and immediately call methods on them without parentheses:

$object = new MyClass->method();

This simplification reduces the visual noise in code, making it slightly more readable and less verbose.

Performance Improvements

Although specific performance metrics aren't detailed, PHP 8.4 includes general cleanups and optimizations aimed at improving execution speed, memory usage, and overall efficiency. These continual enhancements ensure PHP remains competitive in terms of performance.

Conclusion

PHP 8.4 introduces several features that enhance the development experience, from property management to better HTML5 support and cleaner code syntax. Developers are encouraged to explore these features, taking advantage of the new capabilities while being mindful of the transition and potential compatibility issues with older PHP versions.

The PHP community continues to evolve the language, focusing on modern development needs while maintaining backward compatibility where feasible. As always, testing in a staging environment before upgrading live systems is recommended to ensure smooth integration of these new features.

Tell us about your project

Our offices

  • Dhaka
    D-28/2 Arambag Housing
    Mirpur 7, Dhaka 1216
  • London
    44 Lucas Avenue
    London E13 0RL