Towards Powerful PHP Applications: WeakMaps and Their Practical Usage

Doğan Uçar
3 min readJul 20, 2023

PHP introduces WeakMap datastructure with version 8.0. This new data structures is capable of containing objects while simultaneously enabling them to be cleared via garbage collection once not needed anymore. WeakMap is a evolution of weak references added with PHP 7.4 and enables the development of collections of references that can be subjected to garbage collection in the absence of other object references. In essence, Weak Maps have the potential to optimize memory management.

TL;DR WeakMap datastructure holds references to objects but releases to be garbage collected once there are not other references. This is especially useful tasks like for caching, where cache entry is removed once object is not needed anymore.

Typical Scenarios for WeakMaps

Since most PHP applications are request-driven, memory is automatically cleared after every request. However, applications running long living daemons or using asynchronous PHP frameworks have to actively manage potential memory leaks. In these scenarios, WeakMap data structure can offer an innovative and simple solution for managing life cycle of objects.

In basic terms, WeakMap acts as a key-value storage system, where the keys are objects, and values can contain any type of data. The key is weakly referenced within the key-value storage, and if the key is not referenced by any other object, garbage collection takes action and removes the object entirely (including WeakMap). Weak Map allows for the storage of additional data against an object key, without altering the key object’s state or hindering its garbage collection.

<?php
$wm = new WeakMap();
$stdClass = new stdClass();
$wm[$stdClass] = true;
$stdClass->id = 1;
var_dump($wm);
unset($stdClass);
var_dump($wm);

results in:

object(WeakMap)#1 (1) {
[0]=>
array(2) {
["key"]=>
object(stdClass)#2 (1) {
["id"]=>
int(1)
}
["value"]=>
bool(true)
}
}
object(WeakMap)#1 (0) {
}

and that’s it. There is no magic about it, think just about an array that changes dynamically it’s content 🙂

Use Cases for PHP WeakMaps

One possible use of WeakMap is to store data associated with a specific object. When the object is unset or goes out of scope, the additional data is also cleared by WeakMap.

This offers an efficient volatile cache storage solution with preventing memory issues such as the Lapsed Listener Problem. This ensures the cached data doesn’t cause a memory leak by storing objects that prevent garbage collection or by storing additional data for objects that are no longer needed.

As stated above, WeakMap can be used to create a cache where the lifecycle of cache keys (objects) and values (arbitrary data) are automatically managed when the key goes out of scope.

Conclusion

To sum up, the addition of Weak Maps in PHP 8.0 provides a leap forward in managing object life-cycles and efficient memory utilization. These advancements highlight the evolution of PHP in the right direction, with a contemporary, object-oriented approach, and stricter features. WeakMap epitomizes this development, providing an effective tool to optimize memory handling, manage temporary caches, and associate auxiliary data.

As PHP continues to evolve, the language is progressively embracing modern principles and practices. It’s evolving to become more object-oriented, giving developers robust tools for creating scalable and maintainable applications. The introduction of stricter typing rules and other features only cements PHP’s place as a language that’s serious about catering to the evolving needs of the software development landscape.

As the landscape of web development continues to change and grow, the need for experienced PHP developers who understand these modern paradigms has never been more critical.

Looking for a PHP developer?

Looking for a seasoned PHP developer who’s adept at using these modern PHP tools and practices? Look no further! I bring to the table a wealth of experience in PHP development, with a keen understanding of the latest PHP 8.0 features. My skillset ensures that your projects will be designed with best practices, be well-optimized, and future-proof. Reach out today using the contact form on my website, and let’s build solutions that stand the test of time!

This blog post was originally posted on my website: https://www.dogan-ucar.de/towards-powerful-php-applications-weakmaps-and-their-practical-usage/

--

--

Doğan Uçar

Software Engineer, PHP/Laminas (Zend), Backend, Cloud, Freelancer & CEO, Open Source Contributor