The latest release of PHP, PHP 8.4, is packed with features that simplify code, improve performance, and align with modern development practices. Hereโs a quick look at the highlights, along with examples:
๐น Property Hooks
Eliminate boilerplate getters and setters! Customize property access behavior directly in your classes.
class User {
private string $password;
public function __get(string $name) {
if ($name === 'password') {
return '***';
}
throw new Exception("Property $name not found");
}
public function __set(string $name, $value) {
if ($name === 'password') {
$this->password = password_hash($value, PASSWORD_DEFAULT);
}
}
}
$user = new User();
$user->password = 'secure123';
echo $user->password; // Output: ***
๐น Asymmetric Visibility
Control reading and writing access with different visibility levels for properties.
class BankAccount {
public function __construct(
public readonly float $balance = 0.0
) {}
private function setBalance(float $amount): void {
// Business logic for updating the balance
}
}
$account = new BankAccount(100.0);
echo $account->balance; // Public for reading
// $account->balance = 200.0; // Error: Cannot modify (private for writing)
๐น New Array Find Functions
Work smarter with arrays using new utility functions like array_find
and array_all
.
$users = [
['id' => 1, 'name' => 'Alice'],
['id' => 2, 'name' => 'Bob'],
];
$user = array_find($users, fn($user) => $user['name'] === 'Bob');
print_r($user); // Output: ['id' => 2, 'name' => 'Bob']
$isAllAdults = array_all($users, fn($user) => $user['age'] >= 18);
๐น Class Instantiation Without Extra Parentheses
Chain methods or access properties seamlessly without redundant parentheses.
class Task {
public function status(): string {
return 'Completed';
}
}
echo (new Task)->status(); // Output: Completed
๐น HTML5 DOM Parser
The DOM parser now fully supports HTML5, improving web compatibility.
$dom = new DOMDocument();
$dom->loadHTML('<!DOCTYPE html><html><body><div>Hello</div></body></html>');
echo $dom->saveHTML(); // Parses HTML5 content properly
๐น Deprecations
Stay ahead of breaking changes:
- Implicit nullable types are deprecated.
- Session usage via GET/POST has been deprecated.
๐ก Why It Matters:
PHP 8.4 empowers developers to write cleaner, more efficient, and modern code. Whether you're building web applications, APIs, or anything in between, these features make development more enjoyable.
๐ Which feature excites you the most? Letโs discuss in the comments!
Top comments (4)
Friendly heads up, a number of the features you mention here are not new to PHP 8.4. In particular these features have existed in PHP for a while:
__get
and__set
methodsPlease check php.net/releases/8.4/en.php
I have read the release notes. The example of property hooks in the article just uses PHP magic methods. Those have existed for a really long time. If you look at the release notes sample of property hooks, you'll see that property hooks are not magic methods.
Here is a proper example of property hooks:
Asymmetric visibility is new, but the example of it here does not illustrate asymmetric visibility. Instead, it illustrates features that have been around for a while.
An example of asymmetric visibility:
Finally, class instantiation without parentheses is not new. I've used it for years now. If you read the release notes carefully, you will see that the class instantiation without extra parentheses is actually different.
Pre PHP 8.4:
PHP 8.4 Version:
git@github.com:zees-tech/resumebuilder.git
check code and feel free to update