On Wed, Jun 17, 2026, at 23:32, Rob Landers wrote:
> Hello internals,
> 
> I was reminded of my records RFC today, and one of the features of the RFC 
> was "short constructors" generally called "primary constructors" in C#/Kotlin.
> 
> They would look like this:
> 
> class Point(public int $x, int $id = 0) extends Base($id);
> 
> Which is just sugar for this:
> 
> class Point extends Base {
>   public function __construct(public int $x, int $id = 0) {
>     parent::__construct($id);
>   }
> }
> 
> or this:
> 
> class Point extends Base {
>   public int $x;
>   public function __construct(int $x, int $id = 0) {
>     $this->x = $x;
>     parent::__construct($id);
>   }
> }
> 
> A class with a primary constructor *may not* have a defined `__construct` 
> function. Any special initialization must be done with hooks:
> 
> class Temperature(
>   public float $celsius {
>    set {
>      if ($value < -273.15) {
>        throw new ValueError('below absolute zero');
>      }
>      $this->celsius = $value;
>    }
>  }
> ) {}
> 
> new Temperature(20.0);   // ok
> new Temperature(-300.0); // ValueError: below absolute zero
> 
> I'm sending this email to the list to gather additional feedback before 
> pursuing a formal RFC proposal.
> 
> — Rob

I just realized that my examples did not demonstrate the classes with a body, 
but they may also have a body!

— Rob

Reply via email to