Re: [RFC] [DISCUSSION] Ensure correct magic methods' signatures when typed

From: Date: Thu, 16 Apr 2020 15:24:10 +0000
Subject: Re: [RFC] [DISCUSSION] Ensure correct magic methods' signatures when typed
References: 1 2  Groups: php.internals 
Request: Send a blank email to internals+get-109690@lists.php.net to get a copy of this message
On Thu, 16 Apr 2020 at 16:22, Guilliam Xavier <guilliam.xavier@gmail.com> wrote: > On Sun, Apr 5, 2020 at 4:02 PM Gabriel Caruso <carusogabriel34@gmail.com> > wrote: > > > > Hello, internals. > > > > Hereby you can find the RFC Document that I want to discuss as suggested > > via https://externals.io/message/109416 and > > https://externals.io/message/107990: > > > > https://wiki.php.net/rfc/magic-methods-signature > > > > Best regards, > > > > -- Gabriel Caruso > > Hello, > > Thank you, this seems a sensible thing to add. > > Just an interrogation: the following magic methods (from the > documentation) aren't mentioned at all in the RFC: > - __sleep(): array > - __wakeup(): void > - __unserialize(array $data): void > - (__invoke is basically untyped) > - __set_state(array $properties): object > - __debugInfo(): array > Is there a reason for leaving them out? > Related, the RFC mentions that __unserialize and > __toString already > have a *runtime* check that they respectively return an array > and a > string (when called), but why not check their signature (if > typed) > at *compile time* too (i.e. make https://3v4l.org/ZPrVi an > error)? > > Regards, > > -- > Guilliam Xavier > Hello Guilliam Magic methods not mentioned in the RFC won't be changed, that's why they aren't mentioned. The reason is either: - Isn't possible to add checks: the case of __invoke - They aren't really magic methods, but an extension method implementation (as far as I understood during the development of this RFC) __unserialize and __serialize should be possible to add these checks, I'll take a look in the implementation. About __toString: this check is already performed in PHP 8.0: https://3v4l.org/jIg7b/rfc#git-php-maste <https://3v4l.org/jIg7b/rfc#git-php-master>r

« previous php.internals (#109690) next »