Understanding PHP’s Shift: Migrating from Resources to Objects

Doğan Uçar
3 min readJun 9, 2023

As said many times before, PHP is evolving from a script kiddy language to a modern and powerful object oriented one. This is not only visible with the features as enums, metadata or fibers added to PHP core, but also with things “under the hood” like migrating from resources to objects.

Resources in PHP: Definition and Problems

A resource is a special variable type in PHP that holds a reference to an external resource such as a database connection, file handle, or a stream. They are typically created by special functions such as fopen(), mysqli_connect(), curl_init(), etc. and are not native data types like integers, strings, arrays, and objects.

To manage resources, PHP uses a mechanism that allows these resources to be cleaned up automatically when they are no longer in use. This automatic cleanup helps to prevent memory leaks that could otherwise occur if the resources were not properly closed or released.

Resources are different from primitive types because they contain a reference to an external resource rather than storing a simple value like an integer or a string.

PHP Resources aren’t inherently “bad”, they have been and continue to be quite useful for a number of tasks in PHP, especially for interacting with external systems like databases, files, and network resources. However, they do have certain characteristics that can make them more challenging to work with compared to other types, such as objects.

Advantages of Objects instead of Resources

Objects offer more abstraction and encapsulation in PHP, providing a coherent way to bundle data and associated behaviors together. This enhances code readability, maintainability, and reusability. Moreover, objects provide robust error handling through exceptions, support type-hinting for safer code, and allow introspection, facilitating better debugging and analysis.

Summarized:

  1. Lack of Abstraction: Resources don’t have a means to represent complex data structures or behaviors, unlike objects which can encapsulate related data and methods together.
  2. Weak Error Handling: Typically, resources return false on error, which requires the developer to manually check for errors. This can lead to inconsistent error handling, whereas objects can throw exceptions which are easier to handle and trace.
  3. Inconsistency: Working with resources can be less intuitive than working with objects or primitives. Each resource type can behave differently, which can lead to confusion.
  4. No Type Hinting: PHP’s type hinting doesn’t work with resources, so you can’t enforce that a function must be passed a specific type of resource (like you can with objects). This can make the code more error-prone and harder to debug.
  5. Difficulties with Introspection: Unlike objects, resources don’t have methods or properties that you can examine, which can make debugging more difficult.

These issues do not make resources “bad” per se, but they do highlight why there can be benefits in moving towards objects for some of these tasks in PHP. Objects in PHP, on the other hand, allow you to encapsulate data and behaviors into a single entity. This encapsulation makes it easier to manage complex data structures and behaviors, as well as promoting code reuse through object inheritance and polymorphism.

The migration from objects to resources is an ongoing and long term process, as you can follow here. Most of them seem to be implemented, but still there are some missing.

Looking for a Senior PHP Developer?

As an experienced PHP developer, I specialize in crafting efficient and robust solutions tailored to your specific needs. My expertise extends to various aspects of PHP backend development, including object-oriented techniques, scaling application in the cloud and the latest PHP frameworks.

With a deep understanding of modern PHP development as well as legacy code bases, I can modernize your existing PHP codebase to enhance its maintainability, readability, and error-handling capabilities. Whether you need a complex web application or require expert guidance to optimize your existing PHP projects, I provide high-quality, reliable, and efficient services to propel your business goals. Let’s harness the power of PHP together to drive your digital success.

Just use the form on my website — I will call you back as soon as possible!

This post was originally posted on my blog: https://www.dogan-ucar.de/understanding-phps-shift-migrating-from-resources-to-objects/

--

--

Doğan Uçar

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