uuid: - value: 70c71a01-1c5a-4b25-8706-d02a4284662e langcode: - value: en type: - target_id: daily_email target_type: node_type target_uuid: 8bde1f2f-eef9-4f2d-ae9c-96921f8193d7 revision_timestamp: - value: '2025-05-11T09:00:01+00:00' revision_uid: - target_type: user target_uuid: b8966985-d4b2-42a7-a319-2e94ccfbb849 revision_log: { } status: - value: true uid: - target_type: user target_uuid: b8966985-d4b2-42a7-a319-2e94ccfbb849 title: - value: 'Using readonly in PHP' created: - value: '2025-02-13T00:00:00+00:00' changed: - value: '2025-05-11T09:00:01+00:00' promote: - value: false sticky: - value: false default_langcode: - value: true revision_translation_affected: - value: true path: - alias: /daily/2025/02/13/readonly langcode: en body: - value: |

Since PHP 8.1, properties on PHP classes have been able to be marked as readonly.

Once they've been set, they can't be changed or overwritten.

This is great for data transfer objects (DTOs) that you want to be immutable and know the values are the same as when they were set.

Here's an example:

class MyDto {

        public function __construct(
          public readonly string $name,
          public readonly int $age,
        ) {
        }

      }
      

I don't need to make the properties private or protected and write getter methods for them.

I can make them public, knowing the values can't be changed.

readonly classes

Since PHP 8.2, the entire class can be readonly, making the code cleaner and easier to read.

This class does the same as the previous example:

readonly class MyDto {

        public function __construct(
          public string $name,
          public int $age,
        ) {
        }

      }
      

Here's the thing

This is a great example of how the PHP language continues to evolve and improve, and it's been a great way to make it easier to keep my code clean and with fewer bugs.

If you want a way to easily add readonly to properties or classes, take a look at Rector which can automate it for you.

format: full_html processed: |

Since PHP 8.1, properties on PHP classes have been able to be marked as readonly.

Once they've been set, they can't be changed or overwritten.

This is great for data transfer objects (DTOs) that you want to be immutable and know the values are the same as when they were set.

Here's an example:

class MyDto {

        public function __construct(
          public readonly string $name,
          public readonly int $age,
        ) {
        }

      }
      

I don't need to make the properties private or protected and write getter methods for them.

I can make them public, knowing the values can't be changed.

readonly classes

Since PHP 8.2, the entire class can be readonly, making the code cleaner and easier to read.

This class does the same as the previous example:

readonly class MyDto {

        public function __construct(
          public string $name,
          public int $age,
        ) {
        }

      }
      

Here's the thing

This is a great example of how the PHP language continues to evolve and improve, and it's been a great way to make it easier to keep my code clean and with fewer bugs.

If you want a way to easily add readonly to properties or classes, take a look at Rector which can automate it for you.

summary: null field_daily_email_cta: { }