On Sun, 31 May 2020 at 15:57, Nikita Popov <nikita....@gmail.com> wrote:
> On Fri, May 29, 2020 at 6:45 PM Gabriel Caruso <carusogabrie...@gmail.com> > wrote: > >> Hello, internals! >> >> I have opened the voting for >> https://wiki.php.net/rfc/magic-methods-signature. >> >> The voting period ends on 2020-06-19 at 18h (CEST). >> > > The RFC is a bit unclear on what is actually being proposed. It says > > > This RFC proposes to add parameter and return types checks per the > following details. > > and goes on to list (reasonable looking) magic method signatures, but does > not say how exactly those types are going to be checked. Is this going to > require exactly the same signature, or is this going to be in accordance > with variance rules? For example, are all of the following signatures valid > under this RFC? Only the first two? None of them? > > // Narrowed return type from ?array > public function __debugInfo(): array {} > > // Narrowed return type from mixed > public function __get(string $name): int {] > > // Widened argument type from string > public function __get(string|array $name): mixed {} > They are going to be checked following the variance rules, not the *exactly* same as the RFC. I'll mention this, thanks for point it out. Assuming this, your examples: 1 and 2. Will be valid, following the rules introduced by the `mixed` RFC. 3. Is that allowed in PHP? If so, the RFC will compliance with that. > > Also, is omitting the return type still permitted, even though it would > nominally violate variance? > > public function __debugInfo() {} > Yes, this hasn't changed. The RFC only affects *typed* methods. > > Finally, if omitting the return type is permitted, will an implicit return > type be added, like we do for __toString()? Would the method automatically > become > > public function __debugInfo(): ?array {} > An implicit return type won't be added for any of the magic methods. I believe that's a huge BC, and I don't want to debate that for PHP 8 (maybe PHP 9, yes). > > and report as such from reflection? > I need more clearance on this one: are you asking how magic methods are reported via Reflection and if that will be changed? > > Nikita >