On Wed, 15 Apr 2020 at 12:57, Nikita Popov <nikita....@gmail.com> wrote:

> On Tue, Apr 14, 2020 at 7:45 PM Claude Pache <claude.pa...@gmail.com>
> wrote:
>
>>
>>
>> Le 14 avr. 2020 à 18:53, Nikita Popov <nikita....@gmail.com> a écrit :
>>
>> On Tue, Apr 14, 2020 at 6:07 PM Claude Pache <claude.pa...@gmail.com>
>> wrote:
>>
>>>
>>>
>>> > Le 14 avr. 2020 à 16:54, Nicolas Grekas <nicolas.grekas+...@gmail.com>
>>> a écrit :
>>> >
>>> > I'm just not sold on allowing "void" on __construct, because the very
>>> concept of a return type on a constructor is ... void, and also because of
>>> the code style choices this will open (and the CS "wars" I mentioned).
>>> >
>>>
>>> This issue is not specific to magic method like __construct(). It is the
>>> whole concept of “void” as return type which is, say, “problematic”.
>>>
>>> In fact, “void” is not really a return type. It is a way to state that
>>> the method is not supposed to return anything, which means, as you said
>>> very well, that “the very concept of return type on [this method] is void”.
>>>
>>> That might be a reason to reject the concept of “void” as return type.
>>> Or to revive https://wiki.php.net/rfc/allow-void-variance <
>>> https://wiki.php.net/rfc/allow-void-variance> . But again, the issue is
>>> orthogonal to the fact that this particular method is magic, and we should
>>> not cherry-pick and reject the concept of “void” for __construct() and
>>> similar magic methods only.
>>
>>
>> Constructors not having a return type is standard behavior across most
>> (all?) languages. You can't specify a constructor return type in C++. You
>> can't specify one in C#. You can't specify one in Java. Off-hand, I can't
>> name a language that both has a first-class constructor concept (Rust's
>> "new" idiom does not count) and specifies a return type on it.
>>
>> It would naturally follow that, yes, you can't specify a constructor
>> return type in PHP either, just like we enforce right now. Unless we have
>> some strong reason to deviate from standard behavior that I do not see?
>>
>> Regards,
>> Nikita
>>
>>
>> Do those languages allow to return something from the constructor (as
>> does PHP currently)? because I’m more interested in the semantics of `:
>> void` than the exact way to have it.
>>
>
> Ah, so that's what this is about! In that case, I'd be happy to simply
> always enforce that __construct() cannot return a value, in the same way we
> do for ": void" functions. (If we have backwards compatibility concerns, we
> can add this as a warning instead of hard error.)
>
> Nikita
>


I'll change the RFC and remove the `: void` return allowance for
`__construct()`. Should we do the same for `__destruct()`?

Nikita, about your suggestion of checking the actual return value of
`__construct()`, I've mentioned in the RFC that I want to do that for all
the magic methods in a future RFC (
https://wiki.php.net/rfc/magic-methods-signature#future-scope). Do you
think we can follow with that, or no, we should add this check to the
current RFC?

Nicolas, I've improved the RFC document. Let me know if there's anything
else that I need to clarify.

Thanks for the feedback y'all.

Best regards,

Reply via email to