--- title: > Immutable read-only properties in PHP 8.1 pubDate: 2023-04-13 permalink: >- daily/2023/04/13/immutable-read-only-properties-in-php-8-1 tags: - php --- Continuing with yesterday's data transfer object (DTO) example, something that can be done since PHP 8.1 is to make properties read-only: ```language-php class AccountDetails { public function __construct( public readonly string $accountNumber, public readonly string $sortCode, ) {} } ``` This means the public properties can be read and used without the need for getter methods, but cannot be overridden - making the DTO immutable. Without `readonly`, a DTO can be created and the property values can be changed: ```language-php $accountDetails = new AccountDetails('12345678', '00-00-00'); $accountDetails->accountNumber = 'banana'; ``` With `readonly` set, you'd get a fatal error instead: > Fatal error: Uncaught Error: Cannot modify readonly property AccountDetails::$accountNumber in /home/opdavies/tmp/example.php:13