rfc:constructor_return_type

This is an old revision of the document!


PHP RFC: Allow void return type on constructors/destructors

Introduction

This RFC proposes to allow specifying void return type on constructors and destructors. In a way, this optional return type is like a trailing comma: some might use it, some might not, but both cases are valid and allowed.

Note, the following RFC suggests to allow specifying an OPTIONAL void return type. It's more or less just a cosmetic addition and by no means is mandatory. If you prefer no return type, that is completely legal.

Proposal

Explicit declaration

Since a fix for bug #79679 is being worked on, soon it will be illegal to return anything from the constructor (even though no return type means mixed|void).

<?php
class Test {
    public function __construct() {}
}
 
class Test2 extends Test {
    public function __construct() {
        // WTF? Why isn't this legal?
        // No return type means mixed|void
        // Right? So this should work?
        $test = parent::__construct();
    }
}

In order to signal that the function does not return any value, we should be able (but not forced) to explicitly declare the void return type. As per the Zen of Python, explicit is always better than implicit.

Thus, this RFC suggests allowing to do so:

<?php
class Test {
    public function __construct(): void {}
}
 
class Test2 extends Test {
    public function __construct(): void {
        // We explicitly state that the
        // parent constructor does not
        // return. Makes more sense now.
        $test = parent::__construct();
    }
}

Documented as void

In the PHP manual, both constructor and destructor are specified to have void return type (e. g. here).

__clone allows void return type

...

Consistency with other methods

...

Backward Incompatible Changes

None.

It is allowed to not a specify a return type. Although, since no return type means mixed|void, it is not legal to “narrow” the return type to mixed (using covariance), only void.

Vote

2/3 majority Yes/No.

Implementation

rfc/constructor_return_type.1592264832.txt.gz · Last modified: 2020/06/15 23:47 by moliata