Add daily email for 2025-02-13
readonly
This commit is contained in:
parent
a09911551e
commit
9fe5a268bb
61
source/_daily_emails/2025-02-13.md
Normal file
61
source/_daily_emails/2025-02-13.md
Normal file
|
@ -0,0 +1,61 @@
|
|||
---
|
||||
title: Using readonly in PHP
|
||||
date: 2025-02-13
|
||||
permalink: daily/2025/02/13/readonly
|
||||
tags:
|
||||
- software-development
|
||||
- php
|
||||
cta: ~
|
||||
snippet: |
|
||||
Did you know you can make classes and properties read-only since PHP 8.1?
|
||||
---
|
||||
|
||||
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:
|
||||
|
||||
```php
|
||||
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:
|
||||
|
||||
```php
|
||||
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][0] which can automate it for you.
|
||||
|
||||
[0]: {{site.url}}/daily/2025/01/31/rector
|
Loading…
Reference in a new issue