Skip to content

PHP readonly class with constructor promotion and named arguments

PHP Dasun Kalupahana 84 views

<?php

final readonly class Point
{
    public function __construct(public int $x = 0, public int $y = 0) {}

    public function withX(int $x): static
    {
        return new static($x, $this->y);
    }
}

$p = new Point(y: 5);
$q = $p->withX(10);
echo "$p->x,$p->y -> $q->x,$q->y", PHP_EOL; // 0,5 -> 10,5

try {
    $p->x = 99;
} catch (Error $e) {
    echo $e->getMessage(), PHP_EOL; // Cannot modify readonly property Point::$x
}

A readonly class makes every property immutable, and constructor promotion removes the boilerplate. “Withers” return a new instance instead of changing the old one. Needs PHP 8.2+ (on 8.1, put readonly on each property).

Learn more on the blog

Get new articles in your inbox

Practical tutorials and deep dives, about once a week. No spam, unsubscribe anytime.

Privacy policy

Add DEV Talk to your Home Screen

  1. 1 Tap the Share button in Safari's toolbar.
  2. 2 Scroll down and tap Add to Home Screen.
  3. 3 Tap Add. Open it from the Home Screen to read like an app and to turn on notifications with the bell.

We use cookies to improve your experience and analyze traffic. By continuing, you agree to our Privacy Policy.