
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.
classUser{privatestring$hashedPassword;publicstring$password{get=>'***';// Masked password for displayset(string$plainPassword){$this->hashedPassword=password_hash($plainPassword,PASSWORD_DEFAULT);// Hash the password}}publicfunctionverifyPassword(string$plainPassword):bool{returnpassword_verify($plainPassword,$this->hashedPassword);}}// Example usage$user=newUser();// Set the password$user->password='secure123';// Access the password (masked)echo$user->password;// Output: ***// Verify the passwordvar_dump($user->verifyPassword('secure123'));// bool(true)var_dump($user->verifyPassword('wrongpassword'));// bool(false)
🔹Asymmetric Visibility
Control reading and writing access with different visibility levels for properties.
classBankAccount{publicfunction__construct(publicreadonlyfloat$balance=0.0){}privatefunctionsetBalance(float$amount):void{// Business logic for updating the balance}}$account=newBankAccount(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 likearray_find
andarray_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.
classTask{publicfunctionstatus():string{return'Completed';}}echo(newTask)->status();// Output: Completed
🔹HTML5 DOM Parser
The DOM parser now fully supports HTML5, improving web compatibility.
$dom=newDOMDocument();$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(7)

- LocationVirginia
- EducationFlatiron School
- WorkFull Stack Web Developer at diamondLife
- Joined
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:
- magic
__get
and__set
methods - class instantiation without parenthesis

- LocationNone
- Joined
Please checkphp.net/releases/8.4/en.php

- LocationVirginia
- EducationFlatiron School
- WorkFull Stack Web Developer at diamondLife
- Joined
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:
classA{publicstring$demo;publicstring$demo{set(string$newDemo){$this->demo=preg_replace("/World/","property hook",$newDemo);}}}$a=newA;$a->demo="Hello, world";echo$a->demo;// Prints "Hello, property hook"
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:
classA{publicprivate(set)$demo='Hello World';// Outside classes can get the property, but cannot set it.}
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:
classA{publicfunctionmethod(){}}(newA)->method();// the `new A` syntax has been available for some time. I don't know which version it was added in, but I have used it in PHP 7.4.
PHP 8.4 Version:
classA{publicfunctionmethod(){}}newA()->method();

- LocationNone
- Joined
I already did but thank you bro :)

- LocationBelgium
- Joined
For the property hooks example. I think you mix application output with internal output. I understand why you have this example, but it is too coupled with the user output for me.
The asymmetric visibility example is not correct. The error come from the readonly attribute. if you want asymmetric visibility you need something likepublic private(get) float $balance = 0.0;
Although the readonly attibute also is related to visibility. It is more narrow than the asymmetric visibility that is added to php 8.4.

- LocationA Coruña, Spain
- WorkDev at GotPhoto
- Joined
As mentioned by@speratus some of the examples provided are misleading because they don't use the new 8.4 features. Would be good to fix them.

git@github.com:zees-tech/resumebuilder.git
check code and feel free to update
For further actions, you may consider blocking this person and/orreporting abuse
Read next

TanStack Table - Quick Learning
Abdul Ahad Abeer -

ShedLock: Scheduling + Horizontal Scaling
Igor Rudel -

JavaScript Arrow Functions & Ternary Operator Explained
Sudhanshu Gaikwad -

TDD vs BDD: Which Testing Method Drives Better Code Quality?
Torin Vale -